我有一个搜索功能,对员工很有用,所以我可以按名称搜索。 现在,我想通过staffgroup.groupname过滤员工,但不幸的是我收到了这个错误:
Column not found: 1054 Unknown column 'staffgroups.groupname' in 'where clause'
我正在使用以下tablelayout
我使用了以下条件:
$tmpConditions['AND'][] = array('Staff.isActive =' => "1");
$tmpConditions['OR'][] = array('Staff.lastname LIKE' => "%$name%");
$tmpConditions['OR'][] = array('staffgroups.groupname LIKE' => "%$group%");
[...]
$this->Staff->recursive = 1;
$this->paginate = array('conditions' => $tmpConditions );
$this->set('staffs', $this->paginate());
我无法让它工作,尽管我认为条件设定正确。
欢呼endo
答案 0 :(得分:1)
$tmpConditions['OR'][] = array('staffgroups.groupname LIKE' => "%$group%");
不遵循CakePHP conventions。它应该是:
$tmpConditions['OR'][] = array('StaffGroup.group_name LIKE' => "%$group%");
Model and Database conventions:
型号:
模型类名是单数和CamelCased。 Person,BigPerson和ReallyBigPerson都是传统模型名称的例子。
数据库表:
与CakePHP模型对应的表名称是复数并加以强调。上述模型的基础表分别是people,big_people和really_big_people。
数据库字段:
带有两个或更多单词的字段名称被强调,如first_name。
遵循这些约定,您应该有一个名为staff_groups
的表,其中包含一个名为group_name
的字段。关联的模型将命名为StaffGroup
。
答案 1 :(得分:1)
由于HABTM协会,你不能“开箱即用”。你必须手工完成。
首先,你需要获得你正在寻找的StaffGroup.id
$group_ids = $this->Staff->StaffGroup->field('id', array('groupname LIKE' => '%$group%') );
然后取消绑定HABTM关联,然后将连接表绑定为hasMany关联
$this->Staff->UnbindModel( array('hasAndBelongsToMany' => array('StaffGroup')) );
$this->Staff->bindModel(array('hasMany' => array('StaffStaffGroup')));
您现在可以执行搜索
$this->Staff->StaffStaffGroup->find(
'all',
array(
'conditions' => array(
'StaffStaffGroup.staff_group_id' => $group_ids,
'Staff.isActive =' => "1",
'Staff.lastname LIKE' => "%$name%",
)
)
);
答案 2 :(得分:0)
在$tmpConditions
数组中,您应该采用以下格式:
$tmpConditions = array(
"AND" => array('Staff.isActive =' => "1"),
"OR" => array(
'Staff.lastname LIKE' => "%$name%",
'Staffgroup.groupname LIKE' => "%$group%"
)
);
我假设你有一个名为staffgroups
的表,它实际上包含字段groupname
。
也是行
$this->Staff->recursive = 1;
应该是
$this->paginate = array(
...
'recursive' => 1
);
我相信这应该可以胜任......
答案 3 :(得分:0)
只需将staffgroups
更改为Staffgroup
即可。模型与表的命名约定意味着db table my_tables
将命名为model MyTable
。请参阅http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions。