Laravel 5.5 - 查询多个条件,但仅限于POST数据等于1

时间:2017-10-19 11:16:52

标签: php mysql laravel laravel-5 laravel-5.5

首先,我要说的是,由于我正在努力弄清楚这是如何可行的,因此我只有很少的代码。

我的方案: 我有一个表单,用户可以检查他们希望搜索的技能。每种技能的简单布尔值(0或1,1当然是1)。

我需要使用此数据查询skills表,并提取相应的个人资料,但前提是个人资料的技能列与 所选技能中的至少一个匹配。

我尝试过这样的事情:

$partners = DB::table('skills')
        ->when($start_up_finance, function ($query) use ($start_up_finance) {
            return $query->where('start_up_finance', $start_up_finance);
        })
        ->when($market_research, function ($query) use ($market_research) {
            return $query->where('market_research', $market_research);
        })
        ->get(); 

然而,when无效我的想法。

这可以通过一个简单的where/orWhere组合来实现吗?我只是过度思考它吗?我将使用distinct方法确保没有重复的配置文件显示

1 个答案:

答案 0 :(得分:2)

skills表的理想结构是规范化的结构,其中每个用户技能都驻留在单独的记录中。像这样:

user_id | skill
1       | start_up_finance
1       | market_research
1       | accounting
2       | market_research

现在假设您想获得所有启动财务或会计技能的用户。您可以使用以下简单的MySQL查询:

SELECT DISTINCT user_id
FROM skills
WHERE skill IN ('start_up_finance', 'accounting');

这只会返回此示例中的第一个用户。我在这里使用SELECT DISTINCT来删除只是工件的重复项。

将每个技能存储在单独的列中并不理想的原因是多方面的。但最重要的是,每次添加新技能都需要相当干扰的数据库更改。规范化问题是另一个主要问题。数据库旨在有效地使用行集进行操作,而不是真正的列。

以下是我对Laravel查询的尝试:

users = DB::table('skills')
    ->distinct()
    ->select('user_id')
    ->whereIn('skill', ['start_up_finance', 'accounting'])
    ->get();