我正在从事SilverStripe项目。在我的项目中,我需要编写手动/自定义查询。我试图找出在查询中将“或”设置在“哪里”的地方。
这是我当前的代码
$sqlQuery = new SQLSelect();
$sqlQuery->setSelect('Player.*');
$sqlQuery->setFrom('Player');
$sqlQuery->addWhere([ '"Player"."ID"' => 1 ]);
$sqlQuery->addWhere([ '"Player"."ID"' => 2 ]);
$sqlQuery->addWhere([ '"Player"."ID"' => 3 ]);
我想做的是尝试选择播放ID为1或2或3的记录。但是它不起作用,因为它将与AND而不是OR联接。如何在“或”中使用“哪里”?
我想到了使用setWhereAny。事实是,我们不能为PHP中的数组设置如下相同的数组键。
$sqlQuery->setWhereAny([ 'ID' => 1, 'ID' => 2 ])
这也不起作用
$sql->setWhereAny([ 'ID' => 1 ])->setWhereAny([ 'ID' => 2 ]);
答案 0 :(得分:0)
您的“哪里”应该像这两个中的任何一个;
$aIDs = [1,2,3];
1. $sqlQuery->addWhere(['ID IN (?)'=>implode(',',$aIDs)]);
2. $sqlQuery->addWhere('ID = 1 OR ID = 2 OR ID = 3');
addWhere 在构建SQL查询时,“ where”子句位于数组值中,并且每次使用-> addWhere()时,这些值都会合并。因此,数组键是“表列”。
setWhereAny ;在您的情况下,这不适用,因为您只有1列要过滤。正确使用setWhereAny就像
$sqlQuery->addWhereAny(array(
'ID' => '1',
'OtherID' => '3'
));
对应的查询将是
SELECT * FROM Player WHERE ((ID = ?) OR (OtherID = ?))
希望这会有所帮助