我正在尝试获取除已存在于另一个表中的行之外的行:
| Content | ContentSelected
| –––––––– | ––––––––––––––––––––––––-
| id | content_id | operation_id
| 1 | 1 | 9999
| 2 | 3 | 1000
| 3
=> 2,3
这是我尝试运行此查询的方式:
Content::find('all', array(
'joins' => array(new Query(array(
'source' => 'ContentSelected',
'constraints' => array('ContentSelected.operation_id' => 9999),
'conditions' => array(
'Content.id' => array('<>' => 'ContentSelected.content_id')
));
这里是适配器运行的SQL查询:
SELECT * FROM "Content" AS "Content"
JOIN "ContentSelected" ON "ContentSelected"."operation_id" = 1
WHERE ("Content"."id" <> 0);
是否有其他方法可以执行排除结果的查询,或者强制适配器在where子句中写入ContentSelected.content_id
而不是0
?
由于
答案 0 :(得分:0)
您可以使用Model::connection()->read()
在Li3中运行本机sql。看看http://www.jblotus.com/2011/10/25/executing-raw-mysql-queries-in-lithium/
Content::connection()->read($your_sql);
但在使用这样的解决方案之前。尝试使用模型关系(http://li3.me/docs/manual/models/relationships.md)正确实现模型,这样您就不需要使用本机查询,让模型为您完成工作。