Подготовка к выпуску CakePHP с операцией join и подзапросом

Я, изучая CakePHP, но у меня есть большая проблема с работой с более сложными запросами базы данных. Поэтому я хотел бы выполнить такой запрос:

SELECT p.name, b.value FROM books b LEFT JOIN projects p ON b.project_id=p.id WHERE b.created= (SELECT max(b.created) FROM books b WHERE b.user_id=1) AND b.user_id=1 GROUP BY p.name 

Может ли кто-нибудь помочь мне написать это с помощью механизма cakePHP для подготовки запросов?

Solutions Collecting From Web of "Подготовка к выпуску CakePHP с операцией join и подзапросом"

Ваш код должен быть чем-то подобным, предполагая, что Book e Project находится в отношениях ( Book принадлежит Project )

 $this->Book->find ( 'all', array ( 'fields' => array('Book.value', 'Project.name'), 'conditions' => array ( 'Book.created IN (SELECT MAX(Book.created) FROM books Book WHERE Book.user_id = 1)', 'Book.user_id' => 1 ), 'group' => 'Project.name' ) ); 

Используйте пункт IN.

  SELECT p.name, b.value FROM books b LEFT JOIN projects p ON b.project_id=p.id WHERE b.created IN (SELECT max(created) FROM books WHERE user_id=1) AND b.user_id=1 GROUP BY p.name 

если книги и проекты являются моделями, вы можете использовать модель книги для прямого соединения с помощью функции CakePHP, см. https://stackoverflow.com/a/16286735/2858188

Отправьте эту ссылку http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#sub -queries для написания подзапросов, следуя соглашениям cakephp.