我在我的 PhotosController.php 的视图操作中。我想要做的是给定我正在查看的当前照片的 id,创建一个照片轮播,其中包含当前照片之前的两张照片和当前照片之后的两张照片,当前照片在中间(总共 5 张)。
我被指出了这个解决方案,但我似乎无法使用 $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
)));
我事先有一个包含只返回我需要的字段和相关模型。
下面是我想要显示的内容,它目前使用上面的两个查询工作,但我希望这可以通过一个对蛋糕友好的查询来实现