2016-10-13 8 views
0

Say У меня есть две модели: пользователя и задачиEloquent: Модель отношения без сохранения в БД

Их соотношение выглядит следующим образом: Пользователь может иметь много задач (belongsToMany) задача может иметь много пользователей (belongsToMany)

$user = new User(); 
$task = new Task(); 

Обычно, я бы что-то вроде этого: $user->tasks->attach($task)

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

Я просмотрел документацию, и я обнаружил, что существует метод associate(), но для этого требуется либо одна из модели, у которой есть идентификатор (сохраненный в базе данных).

Можно ли каким-либо образом подключить модель к другой модели, если бы они не сохранялись в базе данных?

ответ

1

Модель в Laravel - это не что иное, как обычный класс. Таким образом, создание экземпляра только не будет сохраняться в БД. Вы должны сохраняться в БД при сохранении модели:

Это можно сделать, запустив save(), как показано ниже:

$user->save(); 
$task->save(); 

$user->tasks()->attach($task->id); 

Важно отметить, что это $user->tasks()->attach() и не $user->tasks->attach()

+0

Да, но я не 't хотите сохранить его в базе данных? –

+0

Вы используете реализацию AR, и вы не хотите сохранять ее в БД? Тогда чего вы пытаетесь достичь здесь? –

+0

Технически, мне просто нужна коллекция. Таким образом, вы можете себе представить, что я просто могу создать массив, а затем легко преобразовать его в коллекцию. Но я набираю текст - намекаю на то, что мои классы принимают только экземпляр «этой» модели, поэтому я бы не получил какое-либо исключение во время выполнения ... И я думал, что это умный ... –

Смежные вопросы