У меня возникли проблемы с установлением моих отношений с Laravel. В моем приложении отношения между пользователями и идеями один-ко-многим. (У пользователя может быть несколько идей.) Я использую Ardent.
Вот моя модель пользователя:
использовать Illuminate \ Auth \ UserTrait; использовать Illuminate \ Auth \ UserInterface; использовать Illuminate \ Auth \ Reminders \ RemindableTrait; использовать Illuminate \ Auth \ Reminders \ RemindableInterface; использовать LaravelBook \ Ardent \ Ardent; Класс User расширяет, Ardent реализует UserInterface, RemindableInterface { использовать UserTrait, RemindableTrait; / ** * Таблица базы данных, используемая моделью. * * строка @var * / защищенный $ table = 'users'; / ** * Атрибуты, исключенные из формы JSON модели. * * массив @var * / protected $ hidden = array ('password', 'Remember_token'); protected $ fillable = array ('first_name', 'last_name', 'email', 'password'); public $ validation_errors; public $ autoPurgeRedundantAttributes = true; public $ autoHashPasswordAttributes = true; public $ autoHydrateEntityFromInput = true; public static $ passwordAttributes = array ('password'); public static $ rules = array ( 'first_name' => 'требуется | между: 1,16', 'last_name' => 'обязательно | между: 1,16', 'email' => 'обязательно | email | уникально: пользователи', 'password' => 'требуется | между: 6 100' ); идеи публичных функций () { return $ this-> hasMany ('Идея'); } }
А вот и моя модель Idea:
использовать LaravelBook \ Ardent \ Ardent; Идея класса расширяет Ardent { / ** * Таблица базы данных, используемая моделью. * * строка @var * / защищенный $ table = 'ideas'; защищенный $ fillable = массив ('название'); public $ validation_errors; public $ autoPurgeRedundantAttributes = true; public $ autoHydrateEntityFromInput = true; public static $ rules = array ( 'title' => 'required' ); пользователь публичной функции () { return $ this-> ownTo ('User'); } }
Наконец, вот мой код контроллера:
класс IdeasController расширяет BaseController { публичная функция postInsert () { $ idea = новая идея; $ Idea-> пользователя () -> адъюнкт (Auth :: пользователь ()); если ($ idea-> сохранить ()) { return Response :: json (массив ( «успех» => правда, 'idea_id' => $ idea-> id, 'title' => $ idea-> title), 200 ); } еще { return Response :: json (массив ( 'success' => false, 'errors' => json_encode ($ idea-> errors)), 400 ); } } }
$ idea-> save () выдает ошибку:
{
"error": {
"type": "LogicException",
"message": "Relationship method must return an object of type Illuminate\\Database\\Eloquent\\Relations\\Relation",
"file": "\/var\/www\/3os\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Eloquent\/Model.php",
"line": 2498
}
}
Сначала я пытался установить user_id в Idea следующим образом:
$idea->user_id = Auth::id();
Затем я изменил его на:
$idea->user()->associate(Auth::user());
Но результаты были одинаковыми.
Любые предложения будут высоко ценится.
Вы не можете использовать associate
в этом направлении, так как он может быть использован только на belongsTo
отношения. В вашем случае идея принадлежит пользователю, а не наоборот.
Я подозреваю, что при сохранении возникает ошибка, поскольку вы создаете идею без необходимого заголовка, а затем пытаетесь получить ошибки, вызвав $idea->errors
в то время как это должно быть $idea->errors()
,
associate
будет работать на belognsTo
отношения, в вашем случае, что вы должны использовать, это присоединение связанной модели. Подробнее о подключении связанного режима см. В документация.