1
votes

I have a small problem that is me consuming days. I need made a search in two diferent models in CakePHP, i'm using CakeDC Search Plugin.The models are 'Desordens' and 'Sinonimos', the association is hasMany. One 'Desorden' hasMany 'Sinonymous':

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

So, i follow the example in CakeDC Docs an made this :

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

What i want to do is a search where the user can insert the name,orphanumber or the synonymous.In SQL would be:

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'))

But the table 'Sinonimo' its not being joined and i have the 1054 error:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Sinonimo.sinonimo' in 'where clause'

I don't know what i missing, the controller i have configured like this:

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

I think its no problem in the model or cakedc filterArg configuration, because the query is constructed in the right way.I try to use bindModel to made a join between the tables 'Desordens' and 'Sinonimos' but no success....

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

Anyone can help me to made this join ?

Thanks

1

1 Answers

0
votes

I solved the problem using $belongsTo in the two Models. When i set $belongsTo the CakeDC create a Join between the tables. I don't know if this a best solution, but works for me. If this help someone.