2016-10-13 136 views
0

说模式的关系,我有两个型号: 用户和任务雄辩:不保存到数据库

他们的关系如下: 用户可以有很多任务(belongsToMany) 任务可以有许多用户(belongsToMany)

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

通常情况下,我会做这样的事情: $user->tasks->attach($task)

但问题是用户和任务不坚持在数据库中编辑。所以如果我运行上面的最后一个代码,我会得到一个完整性约束,因为这些模型没有id。

我已经查看了文档,发现有一个方法associate(),但是这需要具有一个id的模型(保存在数据库中)。

有没有什么办法可以将模型附加到另一个模型,而不必在数据库中持久化?

回答

1

在Laravel的模型不过是一个普通的类。因此实例化它不会坚持DB。你应该坚持到DB通过保存模型:

这可以通过如下运行save()来完成:

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

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

重要的是要注意的是,它的$user->tasks()->attach()而不是$user->tasks->attach()

+0

是的,但我不不想将其保存到数据库 –

+0

您正在使用AR实现,而您不想保存到数据库?那么你想在这里做什么? –

+0

从技术上讲,我只需要收集。所以你可以想象我可以简单地创建一个数组,然后轻松地将它转换为一个集合。但我键入提示我的类只接受'那'模型的一个实例,所以我不会得到任何运行时异常......并且我认为它是聪明的... –