1

在 CakePHP 中进行查找时如何进行嵌套选择?

这是我目前拥有的简化数据。

Listings

id |  title    | content
----------------------
1  | Listing 1 | ...

Media

id        | listing_id | file
----------------------------------
1         | 1          | file 1
2         | 1          | file 2

所以当我这样做的时候。

$this->Listing->find('all');

这是我得到的输出。

id |  title    | content | id        | listing_id | file
------------------------------------------------------------------
1  | Listing 1 | ...     | 1         | 1          | file 1
1  | Listing 1 | ...     | 1         | 1          | file 2

查询如下

SELECT * FROM `listings` AS `Listing` 
LEFT JOIN `media` AS `Image` ON (`Listing`.`id` = `Image`.`listing_id`)

但是,我只是想将它与 Media 表的第一行一起加入。

本质上,这是我正在寻找的查询

SELECT * FROM `listings` AS `Listing` 
LEFT JOIN `media` AS `Image` ON (`Image`.`id` = (SELECT MIN(`Image`.`id`) FROM `media` AS `Image` WHERE `Listing`.`id` = `Image`.`listing_id`))

如何在 CakePHP 中实现该查询?

谢谢,
三通

4

2 回答 2

1

This is how I got it to work.

$this->Listing->find('all', 'contain' => array('Image' => array('conditions' => array(SELECT MIN(`Image`.`id`) FROM `media` AS `Image` WHERE `Listing`.`id` = `Image`.`listing_id`)))));
于 2013-06-14T03:19:20.570 回答
1

您可以使用hasMany与自定义查找查询的关联来做到这一点。

在你的Listing模型中,你会做这样的事情(未经测试)。

 public $hasMany = array(
     'Image'=>array(
         'finderQuery'=>'SELECT MIN(`Image`.`id`) FROM `media` AS `Image` WHERE `Listing`.`id` = `Image`.`listing_id`)'
     )
 );

阅读更多 ->自定义 Finder 查询

于 2013-06-14T00:06:12.930 回答