Не пытайтесь построить этот запрос, используя ORM. Это будет катастрофа в замедленном темпе.
Вместо этого вы должны попытаться выполнить этот запрос как можно ближе к металлу. Я не знаком с API CakePHP (так как я склонен избегать его, как черная чума), но вы должны быть в состоянии создать Model
, который не связан с ActiveRecord и, скорее всего, имеет доступ к чему-либо похожему на оболочку PDO. Используйте это, чтобы выполнить запрос и отобразить результаты в переменные.
Тем не менее, вы, возможно, захотите проверить свой запрос (у вас, кажется, есть какая-то навязчивая цитата о болезни ). Одним из улучшений, которое вы могли бы сделать, было бы прекращение использования id
столбцов в таблицах.
Эта целая установка может действительно выиграть от создания еще одного столбца в таблице Artists: portfolio_size
. Который вы можете обновлять каждый раз, когда он должен быть изменен. Да, это нормализует вашу таблицу, но также сделает этот запрос тривиальным и быстрым, с незначительными затратами в других местах.
Что касается имен столбцов, если у таблицы Artists
есть идентификатор, сохраните его в столбце artist_id
, а если у Products
есть внешний ключ, ссылающийся на Artists.artist_id
, то назовите его тоже artist_id
. Одна и та же вещь должна иметь одинаковое имя во всей вашей базе данных. Это дополнительно позволит вам использовать в операторе SQL USING
. Вот небольшой пример:
SELECT
Users.name
Users.email
FROM Users
LEFT JOIN GroupUsers USING (user_id)
LEFT JOIN Groups USING (group_id)
WHERE Groups.name = 'wheel'
Я полагаю, что этот запрос не нуждается в объяснении, так как он представляет собой простое отношение многих к множеству между пользователями и группами.