Laravel 雄辩:不保存到数据库的模型关系

Laravel 雄辩:不保存到数据库的模型关系,laravel,eloquent,Laravel,Eloquent,假设我有两个模型: 用户和任务 他们的关系如下: 用户可以有许多属于自己的任务 任务可以有多个用户 $user = new User(); $task = new Task(); 通常,我会这样做: $user->tasks->附加$task 但问题是用户和任务没有持久化到数据库中。因此,如果我运行上面的最后一段代码,我将得到一个完整性约束,因为这些模型没有id 我查看了文档,发现有一个方法关联,但这需要在数据库中保存一个id的模型 是否有任何方法可以将一个模型附加到另一个模型,而不将它们持久

假设我有两个模型: 用户和任务

他们的关系如下: 用户可以有许多属于自己的任务 任务可以有多个用户

$user = new User();
$task = new Task();
通常,我会这样做: $user->tasks->附加$task

但问题是用户和任务没有持久化到数据库中。因此,如果我运行上面的最后一段代码,我将得到一个完整性约束,因为这些模型没有id

我查看了文档,发现有一个方法关联,但这需要在数据库中保存一个id的模型


是否有任何方法可以将一个模型附加到另一个模型,而不将它们持久化到数据库中

拉威尔的模型只是一个普通类。因此,仅实例化它不会持续到DB。您应该通过保存模型来持久化到DB:

这可以通过运行“另存为”来完成,如下所示:

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

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

需要注意的是,它是$user->tasks->attach,而不是$user->tasks->attach

Laravel中的模型只是一个普通类。因此,仅实例化它不会持续到DB。您应该通过保存模型来持久化到DB:

这可以通过运行“另存为”来完成,如下所示:

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

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

需要注意的是,它是$user->tasks->attach,而不是$user->tasks->attach,我想您可以手动调用setRelation

$model->setRelation('child', $childInstance);
否则

您只需实例化一个新模型即可创建它:

$model = new Model;
然后,您可以在稍后阶段将其保存到数据库:

$model->save();

我想你可以手动调用setRelation

$model->setRelation('child', $childInstance);
否则

您只需实例化一个新模型即可创建它:

$model = new Model;
然后,您可以在稍后阶段将其保存到数据库:

$model->save();

是的,但我不想将其保存到数据库您使用的是AR实现,您不想保存到DB?那你想在这里实现什么?从技术上说,我只需要收集。所以你可以想象,我可以简单地创建一个数组,然后轻松地将其转换为一个集合。但是我输入hint我的类只接受'that'模型的一个实例,这样我就不会得到任何运行时异常。。。我觉得它很聪明…为什么不把hint作为一个集合输入呢。您可以使用Collection类。May看起来很奇怪,但是Im triyng可以将创建模型的责任从保存到数据库中分离出来,Im使用雄辩的模型作为域实体,并且遇到了相同的情况。@Arun Ganessh的回答帮了我很多忙是的,但我不想将其保存到数据库中您正在使用AR实现,您不想保存到DB?那你想在这里实现什么?从技术上说,我只需要收集。所以你可以想象,我可以简单地创建一个数组,然后轻松地将其转换为一个集合。但是我输入hint我的类只接受'that'模型的一个实例,这样我就不会得到任何运行时异常。。。我觉得它很聪明…为什么不把hint作为一个集合输入呢。您可以使用Collection类。May看起来很奇怪,但是Im triyng可以将创建模型的责任从保存到数据库中分离出来,Im使用雄辩的模型作为域实体,并且遇到了相同的情况。@Arun Ganessh的回答帮助我在处理hasMany关系时传递整个集合。在处理hasMany关系时传递整个集合。