CakePhp:查找/分页条件为" hasMany"相关的模型

时间:2014-10-01 14:35:53

标签: php sql cakephp cakephp-2.0

我正试图为我的一个模特做一个litle搜索动作。 我的模型Salarie与其他一些模型相关联,特别是:

  • Salarie - > hasMany - > Permission
  • Salarie - > hasOne - > Carburant

所以我尝试在我的模型Salarie上创建一个find()来选择与关键字匹配的记录。 您可以在我的模型Salarie或关联的模型PermissionCarburant中找到此关键字。

这是我的实际发现():

    $salaries = $this->Salarie->find('all',array(
        'contain' => array(
            'User','Agence','Entitee','Fonction','Contact','Ligne','Car','CallingCard','Badge','Carburant','Permission'),
        'conditions'=>array(
            'OR'=>array(
                'Salarie.nom LIKE' => '%'.$keyWord.'%',
                'Salarie.prenom LIKE' => '%'.$keyWord.'%',
                'Salarie.secu LIKE' => '%'.$keyWord.'%',
                'Salarie.tel LIKE' => '%'.$keyWord.'%',
                'Salarie.mobile LIKE' => '%'.$keyWord.'%',
                'Salarie.ville LIKE' => '%'.$keyWord.'%',
                'Salarie.email LIKE' => '%'.$keyWord.'%',
                'Carburant.numero LIKE' => '%'.$keyWord.'%',
            )
        )
    ));

此代码有效,但如果我添加此行,则不会查看Permission表/模型 我的条件数组中的'Permission.login LIKE' => '%'.$keyWord.'%',我收到了错误

Column not found: 1054 Unknown column 'Permission.login' in 'where clause'

我尝试使用contain,但这不是我要找的,contain会将数据过滤到find的结果中。

如果有人得到提示?

2 个答案:

答案 0 :(得分:0)

SQL连接仅由hasOne和belongsTo关联完成,而不是由hasMany和HABTM完成。您可以使用Linkable插件根据hasMany关联的条件过滤记录。

答案 1 :(得分:0)

我找到了解决问题的方法。

     'group' => 'Salarie.nom',
         'joins'=>array(
             array(
                'table'=>'permissions',
                'alias'=>'Permission',
                'type'=>'LEFT',
                'conditions'=>array(
                    'Salarie.id = Permission.salarie_id',
                )
            )
        )

如果我有这个代码,我发现SQL查询效果很好。我只需要GROUP BY以避免双重结果。