В CakePhp, как я могу установить условия для модели, которая не связана с той, которую я страгирую, но это связано с тем, что это?

StackOverflow https://stackoverflow.com/questions/3807756

Вопрос

Я Paginating ($ this-> Customer-> Paginate ()) на модели «клиента».

Модель клиента связана с моделью «CONTACT», которая, в свою очередь, связана с моделью «ContactDdress».

Так:

Клиентский контакт Хасмани

Связаться с Capacto ContactDdress.

Теперь я хочу бороться с клиентами в «kssornds-> Index ()», используя поисковый запрос, давайте скажем, «ContactDdress.city», как «% New%»

Как мне это сделать? Когда я делаю это в условиях для страницы, он говорит: «Неизвестный столбец» ContactAddress.City 'в «Путешествие» логически.

Это было полезно?

Решение 2

Я нашел решение, которое очень очень удовлетворительно.

Я просмотрел сложный код функциональности стран и обнаружил, что логически обнаружил, что Paginate устанавливает условия и передает их в функцию поиска модели (если модель не имеет собственной функции «Paginate»).

Сначала я пытался переопределить функцию Paginate, но это было слишком сложно. Решение, которое я нашел в конце, должен пройти присоединения к параметрам Paginate, так же, как вы передадите их при выполнении «найти» на модели:

    //Set the pagination options:   
    `$this->paginate = array(
        'limit' => 25,
        'order' => array(
        'Customer.lastname1' => 'asc'
        ),
        'joins' =>
        array(
                // OUTER JOIN because I wanted to also 
                // fetch record that do not have a 'contact'
        array(
            'table' => 'contacts',
            'alias' => 'Contact',
            'type' => 'LEFT OUTER',
            'conditions' => array(
                'Customer.id = Contact.customer_id',
                'Contact.class' => 'ContactAddress'
            )
            ),
        array(
            'table' => 'contact_addresses',
            'alias' => 'ContactAddress',
            'type' => 'LEFT OUTER',
            'conditions' => array(
                'Contact.index = ContactAddress.id',
            )
            ),
        ),
        // In your conditions you can now use any table that 
        // was joined as well as the original 'customer' table.
        'conditions' => $conditions,

    );

    $this->set('customers',$this->paginate('Customer'));

В любом случае, я надеюсь, что это поможет кому-то!

Другие советы

Paginating на условиях дважды удален сложно в любом случае, торт или нет. Вам либо нужно сделать это в шагах (найти ContactAddresses и связано Contact.customer_ids Во-первых, затем борьба на Customer.id IN ($customer_ids)) Или вам нужно сделать это с подзаимниками. Увидеть Руководство о том, как делать подзапросы правильно (Это не красиво).

Что лучше, зависит от ваших навыков кодирования, размера базы данных и сложности полученного запроса. Тест оба и решать, что работает для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top