我有三个表,users、talents和user_talent作为枢轴表,我试图根据用户的才能筛选用户。两者的关系是:用户可以拥有多个人才,人才可以分配给多个用户。
关系:
public function talents() {
return $this->belongsToMany('App\Models\Talent');
}
public function users() {
return $this->belongsToMany('App\Models\User');
}效果很好。现在我正在尝试根据天赋in过滤用户,但是我没有做到这一点。
With:人才模型不使用$with,而用户使用:
protected $with = [
'talents'
];Filter (请注意,我删除了其他过滤器和分页器):
public function getAllModelsWithFilters(Request $request) {
$model = User::query();
$sortColumn = 'full_name';
$sortDir = 'orderBy';
if ($request->has('talents')) {
$ids = [];
$array = explode(',', $request->query('talents')); // provided as string: 1,2,3,6
foreach($array as $arr) {
$res = (int) $arr;
if (!empty($res)) {
$ids[] = $res;
}
}
if (!empty($ids)) {
$model->with([
'talents' => function ($q) use ($ids) {
$q->whereIn('talents.id', $ids);
}
]);
}
}
return CustomResponse::success([
'data' => $model->{$sortDir}($sortColumn)->get()
]);
}结果
结果是,我得到了所有的用户,甚至那些没有天赋的人。
预期结果
基于人才过滤的用户集合。
使用Lumen v7.1.3
发布于 2020-09-23 10:20:37
这里有答案:laravel belongsToMany Filter
将上述代码更改为:
if ($request->has('talents')) {
$ids = [];
$array = explode(',', $request->query('talents')); // provided as string: 1,2,3,6
foreach($array as $arr) {
$res = (int) $arr;
if (!empty($res)) {
$ids[] = $res;
}
}
if (!empty($ids)) {
$model->whereHas('talents', function($q) use ($ids) {
$q->whereIn('talents.id', $ids);
});
}
}https://stackoverflow.com/questions/64024270
复制相似问题