插入后获取关系
作者:互联网
在我的代码中,我在数据库中插入了新行:
$post = new Post;
$post->user_id = Auth::user()->id;
// more inserts
$post->save();
在我的Post.php中,我有:
protected $with = [
'user', 'answers', 'questions'
];
public function users()
{
return $this->belongsTo('App\User');
}
// etc
但是,当我在插入后返回$post时,没有任何关联(用户,答案,问题).
插入后如何获取所有默认关系来加载?
解决方法:
save()方法将数据持久保存到数据库中,但是它对刷新模型上的数据或重新加载关系没有任何作用.
最简单的解决方案是在调用save()之后刷新对象.这将自动渴望加载您在模型的$with属性中定义的关系:
// ...
$post->save();
// refresh the post from the database
$post = $post->fresh();
另一种选择是使用load()方法自己手动重新加载关系.
// ...
$post->save();
// reload the desired relationships
$post->load(['user', 'answers', 'questions']);
但是,这会复制定义您要自动加载的关系的代码(在Model中定义一次,然后在此代码中定义一次).您可以通过在模型上创建新功能来减轻这种情况.
// in Post model
public function reloadRelations() {
$this->load($this->with);
}
// code usage
// ...
$post->save();
// call your new function to reload the relations
$post->reloadRelations();
但是,与仅调用内置的fresh()方法相比,采用这种方法的唯一真正好处是不会重新运行查询以获取原始Post数据.
如果您每秒处理一千个请求,也许一个查询可能会有所作为,但除此之外,我不必担心,只需使用fresh()方法.但是,这里有选项供您选择.
标签:laravel,laravel-5,eloquent,php,laravel-5-3 来源: https://codeday.me/bug/20191026/1938396.html