我想要实现的目标:按StaffStaffgroup中使用的GroupID过滤员工
我正在使用以下tablelayout
变量$ tmp为我提供了一个工作数组,但问题是Staff是StaffStaffgroups的子对象。我可以解析throu并重新组装一个数组,但这不是一个很好的解决方案。 所以我想使用员工上的条件(参见注释行),但后来我得到错误1054“未找到列:1054未知列”。我试图绑定和取消绑定,但没有结果。
$group_id = 2;
$tmp = $this->Staff->StaffStaffgroup->find('all',
array('conditions' => array(
'StaffStaffgroup.staffgroup_id' => $group_id,
'Staff.isActive =' => "1",
'Staff.last_name LIKE' => "%$name%",
)
)
);
debug($tmp);
//$tmpConditions['AND'][] = array('StaffStaffgroup.staffgroup_id' => $group_ids);
编辑:
我尝试了条件和可控行为,但不幸的是它根本没有过滤任何东西
$this->Staff->contain(array('StaffStaffgroup'));
$this->paginate = array('StaffStaffgroup' =>array(
array('conditions' => array(
'StaffStaffgroup.staffgroup_id' => '2'
)
)
)
);
我也试过了一个内连接但没有过滤:
$this->paginate = array(
'conditions' => array('StaffStaffgroup.staffgroup_id' => 2 ),
'joins' => array(
array(
'alias' => 'StaffStaffgroup',
'table' => 'staff_staffgroups',
'type' => 'INNER',
'conditions' => 'StaffGroup_id = StaffStaffgroup.staffgroup_id'
)
)
);
答案 0 :(得分:5)
您无法使用Containable行为。检查sql转储,您将看到查询已完成。
我会分两步完成
从StaffStaffgroup获取属于您想要的组的人员ID
$staff_ids = $this->Staff->StaffStaffgroup->find(
'all',
array(
'conditions' => array('StaffStaffgroup.staffgroup_id' => $group_id, ),
'recursive' => -1,
'fields' => array('StaffStaffgroup.staff_id'),
)
);
然后让所有员工使用之前的结果
$staffs = $this->Staff->find(
'all',
array(
'conditions' => array(
'Staff.id' => $staff_ids,
'Staff.isActive =' => "1",
'Staff.last_name LIKE' => "%$name%",
),
)
);
答案 1 :(得分:1)
您应该查看可包含的行为。
http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html
这将允许您查询您的Staff模型并包含您的StaffStaffgroup模型,为您提供按照您希望的方式组织的数组。
答案 2 :(得分:1)
我很久以前就意识到这个问题,但我的评论仍然可以帮助其他人找到这个帖子。
我创建了一种行为,可以在幕后为HABTM关联创建正确的连接,使您能够在HABTM模型上使用条件。
型号:
<?php
class Product extends AppModel {
public $actsAs = array(
'FilterHabtm.FilterHabtm',
'Containable' // If you use containable it's very important to load it AFTER FilterHabtm
);
public $hasAndBelongsToMany = array(
'Category' => array(
'className' => 'Category',
'foreignKey' => 'product_id',
'associationForeignKey' => 'category_id',
'with' => 'CategoryProduct'
)
);
}
控制器:
(通过行为可以实现以下目标)
<?php
class ProductsController extends AppController {
public $name = 'Products';
public function index($categoryId = null) {
$products = $this->Product->find('all', array(
'conditions' => array(
'Category.id' => $categoryId // Filter by HABTM conditions
)
));
}
}
请参阅此网址以获取下载和完整使用说明:https://github.com/biesbjerg/FilterHabtm