ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

插入后获取关系

2019-10-26 18:29:51  阅读:199  来源: 互联网

标签:laravel laravel-5 eloquent php laravel-5-3


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

$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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有