В моем приложении у меня есть модели событий и пользователей. Из-за модели событий я должен поместить ее в пространство имен. Поэтому я создал пространство имен следующим образом.
Событие
<?php namespace App\Models;
class Event extends \Eloquent {
public function user()
{
return $this->belongsTo('User');
}
пользователь
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use App\Models\Event;
class User extends Eloquent implements UserInterface, RemindableInterface {
public function events()
{
return $this->hasMany('Event');
}
Отношения между пользователем и событием просты OneToMany. Так по моему EventController Я использую метод POST для создания нового ресурса события.
$e = new Event(array('keys'=>'values')); //without user_id filled
$user->events()->save($e);
В то же время я получил ошибку.
Call to undefined method Illuminate\Support\Facades\Event::newQuery()
Если я не ошибаюсь, я предполагаю, что это ошибка пространства имен. Но пространства имен уже объявлены правильно, я думаю.
Но я пытаюсь посещать похожие вопросы и использовать альтернативный способ в отношениях, и тогда это работает нормально. Лично я не нахожу это удовлетворенным. Любая идея, почему это произошло?
Измените вышеприведенное отношение на
public function events()
{
return $this->hasMany('\App\Models\Event');
}
Если вы положите Event
внутри пространства имен вы должны использовать его с полным именем класса.
Вы можете импортировать его в свой контроллер:
use App\Models\Event;
Или укажите встроенное пространство имен:
new App\Models\Event();
Кроме того, я бы порекомендовал, если вы создадите пространство имен для моделей, в которое вы поместите их все. (User
отсутствует namespace
в вашем коде)
Других решений пока нет …