Laravel 5.5 - 在多个条件下查询,但仅当 POST 数据等于 1 时

Laravel 5.5 - Query on multiple conditions but only if POST data equals 1

首先,我只想说我没有多少代码可以展示,因为我正在尝试弄清楚这是如何实现的。

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

我需要使用此数据查询 skills table,并提取相应的配置文件,但前提是配置文件的技能列匹配 至少一项 [=31] =]选择的技能。

我试过这样的方法:

$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 方法来确保不会显示重复的配置文件

您的 skills table 的理想结构是标准化结构,其中每个用户技能都位于单独的记录中。像这样:

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');

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

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

这是我对 Laravel 查询的尝试:

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