Laravel LeftJoin从第一列返回重复值(mysql)
专栏工作者: 专栏建议: 我的问题是:Laravel LeftJoin从第一列返回重复值(mysql),mysql,laravel,left-join,Mysql,Laravel,Left Join,专栏工作者: 专栏建议: 我的问题是: $getRecommendationWorker = Worker::select('workers.id', 'workers.name', 'workers.photo', 'workers.description', 'workers.profile_worker', 'recommendations.recommendation', 'recommendations.author', 'recommendations.work_author',
$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();
拉维返回:
{"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"}
我从表workers
返回了id
、name
和其他值两次。
我想让你看起来像这样:
{"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
中只返回一行,并从表建议中返回与第一个表相关的所有记录。
当我使用groupBy
(例如:..->->-groupBy('workers.id')
)时,只返回表建议中的第一条记录。我不能在其中使用,因为所有值都将显示在同一页上。
列worker\u id
与表workers
编辑:
工人模型:
public function recommendations()
{
return $this->hasMany('App\Recommendation');
}
推荐模式:
public function workers()
{
return $this->belongsTo('App\Worker');
}
最简单的方法是建立推荐关系
:
$workers = Worker::with('recommendations')->get();
然后通过循环访问这些建议,例如
@foreach($workers as $worker)
@foreach($worker->recommendations as $recommendation)
//
@endforeach
@endforeach
但是,如果您希望行的格式与问题中的示例相同,则可以利用以下事实:
连接就是这样工作的<代码>使用groupBy时,仅返回表建议中的第一条记录
。。。这不是你想要的吗?@Devon No from tableRecommensions
我想要得到与tableworkers
相关的所有记录为什么给我负号,我的查询有什么问题!!是的,但是你有多个针对单个工作人员的建议,这就是为什么你需要对它们进行分组…@Devon当我使用groupBy('Recommensions.worker_id')
Laravel时,从表Recommensions
中只返回一条记录,但我想从Recommensions
表中返回所有记录,它们与表workers
相关,如果您有不同的建议值,则不应出现这种情况。worker\u id.转储查询的SQL(使用调试栏或toSql()
)
$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,
];
});
});