mysql - Laravel LeftJoin 从第一列返回重复值(mysql)
问题描述
我的查询:
$getRecommendationWorker = Worker::select('workers.id', 'workers.name', 'workers.photo', 'workers.description', 'workers.profile_worker', 'recommendations.recommendation', 'recommendations.author', 'recommendations.work_author', 'recommendations.profile_author')
->leftJoin('recommendations', 'workers.id', '=', 'recommendations.worker_id')
->get();
Laravel 返回:
{"id":5,"name":"Piotr Debowski","photo":"3c29641e2a.jpeg","description":"sdasdasd","profile_worker":"https:\/\/codepen.io\/","recommendation":"pierwsza rekomendacja","author":"Jan Kowalski","work_author":"IT spec","profile_author":"https:\/\/stackoverflow.com\/questions\/43136250\/eloquent-join-table-with-two-conditions"}
{"id":5,"name":"Piotr Debowski","photo":"3c29641e2a.jpeg","description":"sdasdasd","profile_worker":"https:\/\/codepen.io\/","recommendation":"druga rekomendacja","author":"Jan Wo\u017aniak","work_author":"dsad","profile_author":"https:\/\/nczas.com\/2018\/08\/21\/wreszcie-zatrzymali-t"}
我有两次返回表中的id
,name
和其他值。workers
我希望返回看起来像这样:
{"id":5,"name":"Piotr Debowski","photo":"3c29641e2a.jpeg","description":"sdasdasd","profile_worker":"https:\/\/codepen.io\/","recommendation":"pierwsza rekomendacja","author":"Jan Kowalski","work_author":"IT spec","profile_author":"https:\/\/stackoverflow.com\/questions\/43136250\/eloquent-join-table-with-two-conditions","recommendation":"druga rekomendacja","author":"Jan Wo\u017aniak","work_author":"dsad","profile_author":"https:\/\/nczas.com\/2018\/08\/21\/wreszcie-zatrzymali-t"}
我希望从表中workers
只返回一行,并从表中返回recommendations
与第一个表相关的所有记录。当我使用groupBy
(例如...->->groupBy('workers.id')
:)时,我只返回表中的第一条记录recommendations
。我不能使用where
,因为所有值都将显示在同一页面上。列worker_id
与表相关workers
编辑:
工模:
public function recommendations()
{
return $this->hasMany('App\Recommendation');
}
推荐型号:
public function workers()
{
return $this->belongsTo('App\Worker');
}
解决方案
最简单的方法是加载关系recommendations
:
$workers = Worker::with('recommendations')->get();
然后通过循环访问推荐,例如
@foreach($workers as $worker)
@foreach($worker->recommendations as $recommendation)
//
@endforeach
@endforeach
但是,如果您希望像问题中的示例那样格式化行,那么您可以利用它们是集合的事实:
$workers = Worker::with('recommendations')->get()
->flatMap(function ($worker) {
$recommendations = $worker->recommendations->isEmpty()
? collect([new \App\Recommendation])
: $worker->recommendations;
return $recommendations->map(function ($recommendation) use ($worker) {
return (object)[
'id' => $worker->id,
'name' => $worker->name,
'photo' => $worker->photo,
'description' => $worker->description,
'profile_worker' => $worker->profile_worker,
'recommendation' => $recommendation->recommendation,
'author' => $recommendation->author,
'work_author' => $recommendation->work_author,
'profile_author' => $recommendation->profile_author,
];
});
});
推荐阅读
- html - Divs 没有在 flex 容器内垂直对齐
- xcode - 如何修复 iOS ITMS-90809?
- tensorflow - “ValueError:无法将大小为 278540 的数组重塑为形状 (256,128,3,3)” 将 YOLOv3 .weights 转换为 .pb
- vhdl - 制作计数器时操作数出错
- html - 为什么 nth-of-type 不能正常工作
- visual-studio-code - VSCode 中的部分是灰色的?
- python-requests - 使用twill和python3.6下载文件
- c++ - 类模板实例化或表达式中的内联(“单行”)函数定义
- html - 可以为元素添加淡入淡出动画使元素闪烁吗?
- javascript - 通过 express.js 中的 res.render() 传递函数并从 pug 文件中访问该函数