我必须获取模型的所有关联数据。UNION查询基本上如下所示:
SELECT * FROM `videos` AS `U1`
WHERE `U1`.`level_id` = '1' AND `U1`.`submitted_date` > '2011-09-11'
UNION
SELECT * FROM `videos` AS `U2`
WHERE `U2`.`level_id` = '1' AND `U2`.`submitted_date` < '2011-09-11'
ORDER BY submitted_date DESC
LIMIT 0,10因此,当我使用$this->Video->find('all')-->时,我会得到所有关联表数据的结果。
现在我想使用UNION SQL查询,它也应该返回关联表数据……
你知道如何使用蛋糕内置函数来获取数据吗?
发布于 2011-09-16 00:18:42
你可以用4种或更多不同的方式来实现这一点……最简单但不推荐的方法是使用
$this->Model->query($query); 其中$query是上面提到的查询。
第二种方法可能不是您想要的,那就是重做sql查询,您将得到相同的结果(但不会用别名分隔),如下所示:
SELECT * FROM `videos` AS `U1`
WHERE `U1`.`level_id` = '1' AND (`U1`.`submitted_date` > '2011-09-11' OR `U1`.`submitted_date` < '2011-09-11')
ORDER BY submitted_date DESC
LIMIT 0,10使用find可以很容易地完成这个查询,如下所示
$conditions = array(
'Video.level_id'=>1,
'OR' => array(
'Video.submitted_date <'=> '2011-09-11',
'Video.submitted_date >'=> '2011-09-11'
)
);
$this->Video->find('all', array('conditions'=>$conditions)) 第三种方法是阿巴·布莱恩特谈到的方法,这里详细解释了直接构建声明的Union syntax in cakePhp。
第四种方法不太喜欢第一种方法,你必须创建一个具有beforeFind函数的行为,在那里你必须检查是否有一个选项联合并创建查询,或者创建类似第三个选项的东西。
您将使用如下所示的find调用它
$this->Video->find('all', array('conditions'=>$conditions, 'union'=> $union));这将是一些更不像可链接或可包含行为的东西。
第二种方法是修改您的cakephp sql驱动程序...这一次,我真的不知道你需要做哪些改变,但它是一种实现这一点的方法……这些驱动程序负责解释和创建查询,连接到数据库并执行查询...
请记住,cakephp发现做检查是必要的,以防止SQLInyection和其他风险。$model->query不会执行此测试,因此要小心
发布于 2011-09-15 23:00:24
这里的问题使用连接和一些直接的数据源访问来构建一个联合查询,该查询可以通过find方法使用。
这是一项工作,代码不会100%适合你-你必须修改它-但它应该让你入门。
https://stackoverflow.com/questions/7432065
复制相似问题