其他分享
首页 > 其他分享> > 插入后获取关系

插入后获取关系

作者:互联网

在我的代码中,我在数据库中插入了新行:

$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