我正在尝试找到一种不同的方法来保存/更新给定模型及其与数据库的关系 .
基本上我有一个“作者”页面的表格,可以添加多个“书籍” . 当然,“作者”和“书”模型具有一对多的关系 .
根据laravel官方教程,您必须:
-
将所有输入数据添加到"Author"模型
-
创建"Author"模型并将其保存到DB中
-
对于每个"Book"输入数据
-
使用$ author-> books() - > save($ book)创建每个"Book"模型并将其保存到数据库中;
但我找不到任何关于如何用"Book"关系填充"Author"模型的教程,实际上使用 push() 方法
我正在寻找这样的东西:
$author = new Author();
$author->name = "Bill Jobs";
$author->phone = "555 - 123456";
// fill model with relations
$author->addRelation($relationsArray)
if($author->push())
{
// ....
}
同样应该用于更新“作者”:首先删除已存储的关系,而不是保存新关系
2 回答
tldr;您将在下面找到推送描述,以及createMany和saveMany关系方法之间的区别
Eloqeunt不处理延迟关系(例如Doctrine2),即 . 你不能这样做:
因为关联完全正确,所以当你调用
associate
方法时 . 它所做的就是这样:所以在上面的情况中,
primary_key
是null
,因为$author
尚未保存 .接下来,虽然
push
不是在文档中创建关联,但它可能会产生这样的印象,并且可能会想要这样做:但是,这也行不通 . 首先,Eloquent不允许您明确地分配关系,如上所述,那么,即使您正确地执行了此操作,仍然不会进行关联:
这次,关系被正确分配,但仍未 Build 关联(分配外键) . 因此,尽管
author
和所有books
都将被保存/更新,但它们根本不会相关联 .话虽如此,您需要自己关联模型并使用push OR exploit Eloquent方法(createMany / saveMany):
从...开始:
1然后 manually :
2或 createMany :
3或 saveMany :
为了创造许多:
然后