CakePHP 3 уровня присоединения найти метод - PullRequest
0 голосов
/ 18 июля 2011

В моей базе данных есть следующие таблицы: «продукты» принадлежат «компании», а «компания» имеет много «адресов компании». И я строю поисковое действие в моем контроллере, которое будет возвращать продукты на основе введенного пользователем адреса компании. Как я могу получить что-то вроде следующего?

SELECT *
FROM products
LEFT JOIN companies ON products.company_id = companies.id
LEFT JOIN company_addresses ON companies.id = company_addresses.company_id
WHERE company_addresses.address1 LIKE '%'.$this->data['Product']['keyword'].'%'
OR company_addresses.address2 LIKE '%'.$this->data['Product']['keyword'].'%'

Это не похоже на работу:

$results = $this->Product->find('all', array(
    'conditions' => array(
        'OR' => array(
            array('CompanyAddress.address1 LIKE' => '%'.$this->data['Product']['keyword'].'%'),
            array('CompanyAddress.address2 LIKE' => '%'.$this->data['Product']['keyword'].'%')
        )
    ),
    'order' =>    array(
        'Product.id' => 'ASC'
    ),
    'contain' => array(
        'Company' => array(
            'CompanyAddress' => array(
                'State',
                'City'
            )
        )
    )
));

Ни это:

$results = $this->Product->find('all', array(
    'order' =>    array(
        'Product.id' => 'ASC'
    ),
    'contain' => array(
        'Company' => array(
            'CompanyAddress' => array(
                'conditions' => array(
                    'OR' => array(
                        array('CompanyAddress.address1 LIKE' => '%'.$this->data['Product']['keyword'].'%'),
                        array('CompanyAddress.address2 LIKE' => '%'.$this->data['Product']['keyword'].'%')
                    )
                ),
                'State',
                'City'
            )
        )
    )
));

1 Ответ

0 голосов
/ 18 июля 2011

Я думаю, что лучше всего использовать соединение CakePHP.

Примерно так:

    $this->Product->find('all', array(
                            'joins' => array(
                                array(
                                    'table' => 'companies',
                                    'alias' => 'Company',
                                    'type' => 'left',
                                    'conditions' => array(
                                        'Company.id = Product.company_id'
                                    ),
                                ),
                                array(
                                    'table' => 'companies_addresses',
                                    'alias' => 'CompaniesAddress',
                                    'type' => 'left',
                                    'conditions' => array(
                                        'CompaniesAdress.company_id = Company.id',
                                        'OR' => array(
                                            'CompanyAdress.address1 LIKE' => '%' . $this->data['Product']['keyword'] . '%', 
                                            'CompanyAdress.address2 LIKE' => '%' . $this->data['Product']['keyword'] . '%', 
                                        ),
                                    ),
                                ),
                            ),
                        ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...