如果作者有很多书("一对多"关系),我想通过$author_id
创建一个孩子,我应该这样做:
$author = Author::find($author_id);
$author->books()->create([...]);
但是这段代码产生了两个SQL请求:
Author::find($author_id)->books()->create([...]);
为了减少SQL请求的数量,我应该将author_id
字段添加到我的Book模型的$fillable
数组中,并执行以下操作:
Book::create([
'author_id' => $author_id,
...
]);
哪种方法更好?至于我,第一个看起来更正确,更有说服力的方式,但对于这种简单的情况,2个SQL请求太多了。有没有其他方法只需要一个SQL请求而不触及$fillable
数组?
答案 0 :(得分:0)
旧学校:
$book = new Book;
$book->author_id = $author_id;
//...
$book->save();
或者你可以绕过可填写的forceCreate
:
Book::forceCreate(['author_id' => $author_id, ...]);
至于哪种方法更好:如果你知道author_id
,那么第二(不使用关系)。但根据我的经验,这种情况很少发生,因为您通常想检查相关模型是否确实存在。但如果您对输入的正确性有信心,则无需进行2次查询。