gpt4 book ai didi

php - 查询构建器条件参数

转载 作者:行者123 更新时间:2023-11-29 02:55:06 25 4
gpt4 key购买 nike

我有一个用户表,该表在 belongsToMany 基础上具有相关数据

 users
id
first_name

skills
id
name

positions
id
name

position_user
position_id
user_id
created_at
updated_at

skill_user
skill_id
user_id
created_at
updated_at

在用户模型中

public function positions()
{
return $this->belongsToMany('App\Position')->withTimestamps();
}

在位

public function users()
{
return $this->belongsToMany('App\User')->withTimestamps();
}

(技能相同)

我目前正在将以下内容传递给 View :

$users = User::with('skills')
->with('skills')
->with('positions')
->get();

我希望能够搜索技能和职位的各种组合,但很难创建一个优雅的解决方案。

如果我选择一个或多个位置,将其传递给 Controller ​​,我可以将信息返回为:

if (Request::get('positions'))
{
$positions = Request::get('positions');
}

位置数组的样子 阵列:3 [? 0 => "分析师" 1 => “律师” 2 => “建筑师”]

if($positions)
{
$users = User::with('skills')
->with('skills')
->with('positions')
->orWhereHas('positions', function($thisquery) use ($positions)
{
$thisquery->whereIn('name', $positions);
})
->get();
}

如果我对同样有效的技能也这样做。

我需要做的是将它们组合起来 - 特别是因为我将在搜索功能中添加更多相关表格。

我试过:

if(($positions)&&($skills))
{
$users = User::with('skills')
->with('skills')
->with('positions')
->orWhereHas('positions', function($thisquery) use ($positions)
{
$thisquery->whereIn('name', $positions);
})
->orWhereHas('skills', function($thisquery) use ($skills)
{
$thisquery->whereIn('name', $skills);
})
->get();
}

但我想要的是更像的东西

$users = User::with('skills')
->with('skills')
->with('positions');
if($skills)
{
$users->orWhereHas('skills', function($thisquery) use ($skills)
{
$thisquery->whereIn('name', $skills);
});
}

if($positions)
{
$users->orWhereHas('positions', function($thisquery) use ($positions)
{
$thisquery->whereIn('name', $positions);
});
}
$users->get();

但这不起作用 - 只返回空结果集。

我怎样才能以优雅的方式实现这一点?

或者是否有更好的方法来实现搜索功能 - 实际上我只是想过滤某些参数。

最佳答案

我认为您需要此处的“and where”条件。或者 where 表示匹配一个或另一个或两个规则。 “And where”只有在两个规则都匹配时才有效。

所以我建议试试这个:

$users = User::with('skills')
->with('skills')
->with('positions');
if($skills)
{
$users->whereHas('skills', function($thisquery) use ($skills)
{
$thisquery->whereIn('name', $skills);
});
}

if($positions)
{
$users->whereHas('positions', function($thisquery) use ($positions)
{
$thisquery->whereIn('name', $positions);
});
}
$users = $users->get();

关于php - 查询构建器条件参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31466257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com