我们有以下型号 -
邮政
----------------------------------------------
| id | title | text | creator | status | etc |
----------------------------------------------
| | | | | | |
----------------------------------------------
creator -> belongsTo User
group -> belongsTo group
Run Code Online (Sandbox Code Playgroud)
用户
posts -> hasMany Posts
avatar -> hasOne Media
Run Code Online (Sandbox Code Playgroud)
媒体
user -> belongsTo User
Run Code Online (Sandbox Code Playgroud)
团体
post - belongsTo Post
Run Code Online (Sandbox Code Playgroud)
当我使用 eloquent 获取帖子时,我可以使用转换函数来转换帖子属性,但无法转换帖子集合中的关系。
$posts = Post::where('status', 'active')
->with(['creator.avatar','group'])
->get();
$posts->transform(function($post) {
$post->title = 'Transformed'; // works
$post->creator->avatar = ['path'=>'/avatar/','file_name'=>'a.png']; // does not work
});
Run Code Online (Sandbox Code Playgroud)
小智 5
当您调用 时$post->creator,您实际上是$post->getRelation('creator')通过“魔术方法”进行调用。
这很重要,因为这意味着您正在该方法返回的对象上设置属性getRelation,而不是通过引用更新创建者关系 - 因此,当您getRelation('creator')再次调用时,将返回原始关系值。
因此,为了达到你想要的目的,你需要覆盖creator关系值:
$posts->transform(function ($post) {
$post->title = 'Transformed';
$creator = $post->creator;
$creator->avatar = [
'path' => '/avatar/',
'file_name' => 'a.png'
];
$post->setRelation('creator', $creator); // or $post->creator = $creator;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |