У меня есть модель с поведением Translate, прикрепленная с двумя полями: заголовок и описание.Я добавил некоторые условия на переводимых полях.Как обычно в разбивке на страницы, CakePHP сначала выполняет подсчет, а затем извлекает все записи.При получении итоговых записей запроса:
SELECT COUNT(DISTINCT( `product`.`id` )) AS COUNT
FROM `products` AS `product`
INNER JOIN `i18n` AS `i18nmodel`
ON ( `product`.`id` = `i18nmodel`.`foreign_key`
AND `i18nmodel`.`model` = 'Product'
AND `i18nmodel`.`locale` = 'eng' )
LEFT JOIN `categories` AS `category`
ON ( `product`.`category_id` = `category`.`id` )
LEFT JOIN `vats` AS `vat`
ON ( `product`.`vat_id` = `vat`.`id` )
LEFT JOIN `availables` AS `available`
ON ( `product`.`available_id` = `available`.`id` )
WHERE ( ( `i18n__description`.`content` LIKE '%test%' )
OR ( `i18n__title`.`content` LIKE '%test%' )
OR ( `product`.`code` LIKE '%test%' ) )
я получаю:
1054: Unknown column 'I18n__description.content' in 'where clause'
, поскольку таблица i18n не объединена как заголовок i18n_ или i18n _description, ноas i18nmodel
Однако, когда разбиение на страницы пытается получить строки запроса (не общие записи), все работает нормально.Есть ли какое-нибудь решение для этого?
Код контроллера выглядит примерно так:
$condition = array();
foreach ($search as $word) {
if (strlen($word) > 0)
$condition[] = array('OR' => array('I18n__description.content LIKE' => '%' . $word . '%','I18n__title.content LIKE' => '%' . $word . '%',
'Product.code LIKE' => '%' . $word . '%'));
}
$conditions = array('AND' => $condition);
$products = $this->paginate($conditions);