【发布时间】:2013-02-22 14:20:12
【问题描述】:
我在 PhotosController.php 的视图操作中。我想要做的是给定我正在查看的当前照片的 id,创建一个照片轮播,其中包含当前照片之前的两张照片和当前照片之后的两张照片,当前照片在中间(总共 5 张)。
我被指向this solution,但我似乎无法使用 $this->Photo->query 将其转换为 CakePHP。
我的控制器
$this->set('photos', $this->Photo->query("
SELECT id, file FROM photos WHERE id <= $id AND page_id = $page_id ORDER BY id DESC LIMIT 3
UNION ALL
SELECT id, file FROM photos WHERE id > $id AND page_id = $page_id ORDER BY id ASC LIMIT 2
"));
不幸的是,当我打开调试时什么都看不到。 id、file 和 page_id 都是 photos 表中的列。 #id 和 $page_id 都从路由器传递给操作。我的语法错了吗?
编辑:如果我删除 UNION ALL 和第二个 SELECT 语句,则查询工作正常,因此模型未加载不是问题,因为它是。
编辑(解决方法):目前我正在执行两个不理想的查询。
$this->set('photos_before', $this->Photo->find('all', array(
'conditions' => array(
'Photo.page_id' => $page_id,
'Photo.id <' => $id
),
'order' => array('Photo.id ASC'),
'limit' => 2
)));
$this->set('photos_after', $this->Photo->find('all', array(
'conditions' => array(
'Photo.page_id' => $page_id,
'Photo.id >' => $id
),
'order' => array('Photo.id ASC'),
'limit' => 2
)));
我之前有一个包含只返回我需要的字段和关联模型。
下面是我想要显示的内容,它目前可以使用上面的两个查询,但我希望这可以通过一个对 Cake 友好的查询来实现
【问题讨论】:
-
你创建了模型照片吗?
-
执行查询时是否出现错误?
-
是的照片是模特。在呈现我的其余视图时执行查询时似乎没有错误,只有包含查询的部分显示“发生内部错误”
-
如果开启调试,生成的SQL是什么?您是否尝试过在 MySQL 中运行该 SQL(例如通过 PhpMyAdmin)。此外,您使用的是低级“查询”方法,它不处理任何转义,所以请非常小心以防止 SQL 注入!
标签: mysql cakephp union cakephp-2.1