【问题标题】:Laravel Pluck Concat RelationsLaravel Pluck Concat 关系
【发布时间】:2021-12-01 07:37:45
【问题描述】:
我在我的项目中使用 laravel 8,试图从模型中提取数据
$user = Users::with('media')->get()->pluck('media.title', 'id')->all();
我得到了输出
{
"sample": 1,
}
我的预期输出,寻找值组合媒体表中的列和用户表中的列
{
"media.title + user.name": id,
}
【问题讨论】:
标签:
php
laravel
eloquent
laravel-8
pluck
【解决方案1】:
据我所知,直接采摘是不可能的。在我看来,您有 2-3 个选项:
在User 模型中创建一个访问器,将用户名和媒体标题连接起来,例如:
public function getNameWithMediaAttribute()
{
return $this->name . ' + ' . $this->media->title
}
然后在查询后使用->pluck('nameWithMedia') 提取。
或者您可以像使用 $user = Users::with('media')->get(); 一样提取它们,然后映射结果以返回您想要的格式。比如:
$users = User::with('media')->get()->map(function($user)
{
return [$user->media->title . ' + ' . $user->name => $user->id];
})->collapse();
不要忘记->collapse() 部分。
您还可以进行查询,在一个字段下收集该数据,然后在从数据库中提取数据后将其提取。但是我的 SQL-fu 还不够好,不能轻易做到这一点。