Связывание двух моделей с плагином поиска CakeDC

У меня есть небольшая проблема, которая заключается в том, что я поглощаю дни. Мне нужно выполнить поиск в двух разных моделях в CakePHP, я использую плагин поиска CakeDC. Это модели «Desordens» и «Sinonimos», ассоциация hasMany. У одного «Desorden» есть много «синонимов»:

public $hasMany = array(
    'Sinonimo' => array(
        'className' => 'Sinonimo',
        'foreignKey' => 'desorden_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),

Итак, я следую примеру из CakeDC Docs и делаю это:

public $filterArgs = array(
    'busca' => array(
        'type' => 'like',
        'encode' => true,
        'before' => false,
        'after' => false,
        'field' => array(
            'Desorden.name',
            'Desorden.orphanumber',
            'Sinonimo.sinonimo')
    )
);

Что я хочу сделать, так это поиск, в котором пользователь может вставить имя, orphanumber или синоним. В SQL будет:

SELECT `Desorden`.`id`, `Desorden`.`name`, `Desorden`.`orphanumber`, `Desorden`.`expertlink`, `Desorden`.`tipodesordem`, `Desorden`.`descricao`, `Sinonimo`.`id`, `Sinonimo`.`sinonimo`, `Sinonimo`.`desorden_id` FROM `rederaras`.`desordens` AS `Desorden` LEFT JOIN `rederaras`.`sinonimos` AS `Sinonimo` ON (`Sinonimo`.`desorden_id` = `Desorden`.`id`) WHERE ((`Desorden`.`name` LIKE 'mult') OR (`Desorden`.`orphanumber` LIKE 'mult') OR (`Sinonimo`.`sinonimo` LIKE 'mult'))

Но таблица «Sinonimo» не объединяется, и у меня ошибка 1054:

Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «Sinonimo.sinonimo» в «предложении where»

Я не знаю, чего мне не хватает, контроллер, который я настроил так:

$this->Prg->commonProcess();
        $this->Desorden->recursive = 0;
        $this->Paginator->settings['conditions'] = $this->Desorden->parseCriteria($this->Prg->parsedParams());            
        $this->set('desordens', $this->Paginator->paginate());

Я думаю, что это не проблема в модели или конфигурации cakedc filterArg, потому что запрос построен правильно. Я пытаюсь использовать bindModel для объединения таблиц «Desordens» и «Sinonimos», но безуспешно....

$this->Desorden->bindModel(array(
            'hasMany' => array(
                'Sinonimo' => array(
                    'foreignKey' => false,
                    'conditions' => array('Desorden.id = Sinonimo.desorden_id')
                )
            )
        ), false);

Кто-нибудь может помочь мне сделать это объединение?

Спасибо


person Deric Lima    schedule 05.07.2015    source источник


Ответы (1)


Я решил проблему, используя $belongsTo в двух моделях. Когда я устанавливаю $belongsTo, CakeDC создает соединение между таблицами. Я не знаю, лучшее ли это решение, но работает для меня. Если это поможет кому-то.

person Deric Lima    schedule 11.12.2015