Глубокие условия работы с CakePHP

предположим, что у вас есть эти модельные отношения:

Предложение категории HABTM

Как бы вы построили условия поиска, чтобы найти все категории, в которых есть хотя бы одно предложение? В то же время Предложение должно быть Offer.enabled => 1. Итак, найдите все категории с хотя бы одним включенным предложением. Условий для проверки в модели предложения несколько, но как только я смогу проверить включено, я думаю, что смогу проверить любое другое поле.

Я мог бы привязать модель habtm к категории, но в этом случае я не могу проверить условие Offer.enabled. Может быть, как-то с помощью containerable? SQL-запрос будет таким:

SELECT DISTINCT Category.nome from categories as Category
LEFT JOIN categories_offers AS CategoriesOffer
ON (CategoriesOffer.category_id = Category.id)
LEFT JOIN offers as Offer ON (CategoriesOffer.offer_id = Offer.id)
WHERE Offer.enabled = 1

Спасибо


person slacky    schedule 21.05.2012    source источник


Ответы (1)


Используйте ключ conditions в определении отношения, чтобы установить отношение, только если Offer.enabled = 1. Взято из книги. например:

class Category extends Model {
    public $hasAndBelongsToMany = array(
        'Offer' => array(
            'conditions' => array( 'Offer.enabled' => 1 )
        )
    );
}
person Dunhamzzz    schedule 22.05.2012
comment
Спасибо. Это нормально, только если мне всегда нужно это условие. Дело в том, что условия всегда меняются. Однако я смог получить результаты, используя связываемое поведение. - person slacky; 23.05.2012