当前位置: 首页 > 知识库问答 >
问题:

Laravel查询生成器`选择(x英寸(?)如同`

闾丘霖
2023-03-14

如何使用Laravel的查询生成器进行此类选择:

SELECT *, (sector1 IN (...)) AS s1, (sector2 IN (...)) AS s2, (sector3 IN (...)) AS s3
FROM jobs
WHERE (sector1 IN (1, 2) OR sector3 IN (1, 2) OR sector3 IN (1, 2))
ORDER BY (s1 AND s2 AND s3) DESC, (s1 AND s2) DESC, (s1 AND s3) DESC, etc...

WHERE部分很容易与其中In(),并且ORDER部分很容易与orderByRaw(),但是我如何使SELECT

结果s1s2s3现在可以用于排序:首先,如果所有3个扇区匹配,比如果扇区1和2匹配,比如果扇区1和3匹配,等等。

(...)是来自用户输入的1个或多个扇区。它们必须被转义和插入等,就像一个WHERE sector1 IN(...)会。

但是怎么做呢?

selectRaw只有一点帮助,因为它不会将数组扩展为多个占位符。这就是我现在拥有的,但不可能是这样:

$query->selectRaw("sector1 IN (" . implode(',', array_fill(0, count($filters['sectors']), '?'))  . ") AS s1", $filters['sectors']);

我必须自己展开占位符吗?必须有一种方法可以让查询生成器这样做。可能是我找不到的条件表达式?构建器本身似乎没有办法扩展,只有语法在执行查询时才这样做,这就是为什么其中/whereNotIn等都是显式方法的原因。


共有1个答案

澹台志诚
2023-03-14

其中()在内部使用语法::参数化()展开占位符。

您也可以单独使用它:

$grammar = new \Illuminate\Database\Query\Grammars\MySqlGrammar();
$query->selectRaw("sector1 IN (" . $grammar->parameterize($filters['sectors'])  . ") AS s1", $filters['sectors']);
 类似资料:
  • 我有一个问题,使laravel查询: 我想举个例子: 我有这个但不起作用:

  • 我想在查询生成器laravel中orderBy 因为我的是类型 所以当它排序的时候...结果远远不是我想要的... 我的剧本就像这样 我已经试过了 我如何铸造OrderBy查询生成器,以便我可以排序desc

  • 我正在使用Laravels查询生成器检索带有一些筛选选项的项目列表-我需要在此查询中进行计数: 计算“Freestyle ID”在likes表中出现的次数。 这有可能吗?返回的数据是完美的,我只需要一个自由泳的喜欢量,其中喜欢表中的自由泳ID为空。

  • 我想使用QueryDSL库构建select count查询,如下所示: 中选择计数(1) 我创建了下一个代码: 由于结果selectStatement是Next: 能否请一些人建议如何重写上面的代码

  • 我正在尝试输出一个显示求职者对特定工作的申请的视图。到目前为止,我只能查看所有接收到的应用程序的转储,但我无法实现查询来仅查看特定作业的应用程序。即我希望能够查看每个不同空缺职务的条目。谢谢 \\ \\

  • 我试图从一个表中选择所有结果,并在用户ID匹配时与另一个表合并。 我有三个表:runs、users和一个run\u用户透视表。我想从数据透视表中的“运行”和其他列(即“已完成”、“粘性”、“上次测试”和“难度”)中选择所有结果,但只从当前用户的“运行用户”中提取数据。 在原始SQL中,我通过一个带有AND语句的左连接成功地做到了这一点: 如何通过查询生成器执行此操作,有何建议?我可以在Larave