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();
首先,我只想说我没有多少代码可以展示,因为我正在尝试弄清楚这是如何实现的。
我的场景: 我有一个表格,用户可以检查他们希望搜索的技能。每个技能的简单布尔值(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();