Laravel / Ardent — при save (), ошибка: метод отношений должен возвращать объект типа Illuminate

У меня возникли проблемы с установлением моих отношений с 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());

Но результаты были одинаковыми.

Любые предложения будут высоко ценится.

2

Решение

Вы не можете использовать associate в этом направлении, так как он может быть использован только на belongsTo отношения. В вашем случае идея принадлежит пользователю, а не наоборот.

Я подозреваю, что при сохранении возникает ошибка, поскольку вы создаете идею без необходимого заголовка, а затем пытаетесь получить ошибки, вызвав $idea->errorsв то время как это должно быть $idea->errors(),

1

Другие решения

associate будет работать на belognsTo отношения, в вашем случае, что вы должны использовать, это присоединение связанной модели. Подробнее о подключении связанного режима см. В документация.

0

По вопросам рекламы [email protected]