我正在尝试根据相关模型中的字段进行搜索。我可以使用belongsTo模型,但不能使用hasMany模型。我确信这是一个简单的我忽略但我看不到它。有人能指出我正确的方向(甚至是我需要的蛋糕页面 - 搜索过,但没有发现任何看起来像这样的东西)。感谢
在群组控制器中:(这不起作用)
$group = $this->Group->find('all', array('conditions' => array('Voucher.id' => '55')));
这样做:
$group = $this->Group->find('all', array('conditions' => array('TourOperator.id' => '3')));
后台文件摘要:
小组模特:
var $belongsTo = array(
'TourOperator' => array(
'className' => 'TourOperator',
'foreignKey' => 'tour_operator_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
var $hasMany = array(
'Voucher' => array(
'className' => 'Voucher',
'foreignKey' => 'group_id',
'dependent' => true,
'conditions' => '',
'fields' => '',
'order' => 'Voucher.date, Voucher.meal_type_id'
)
);
优惠券型号:
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
旅行社模型:
var $hasMany = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'tour_operator_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
更新(如下面的评论中所述,但在此处阅读更清楚)
我最终使用了它。
$groups = $this->Group->Voucher->find('all', array('fields' => 'DISTINCT group_id', 'conditions' => array('Voucher.status' => 'pending')));
$group_ids = Set::extract($groups, '/Voucher/group_id');
$data = $this->Group->find('all', array('conditions' => array('Group.id' => $group_ids)));
我得到一个与我的标准匹配的不同组ID列表,创建一个只包含ID的数组,然后使用它来拉取组,以便按照我在视图中的预期对数组进行排序。
答案 0 :(得分:0)
使用CakePHP的Containable行为,您无法在hasMany和hasAndBelongsToMany关联中使用相关数据的条件。这是因为它使用单独的查询来获取这些关联。
但是,通过可链接行为,您可以使用hasMany关联中的数据来过滤记录。可以在此处下载此行为:https://github.com/Terr/linkable
Linkable使用标准JOIN来加入相关数据。这意味着它不会提取所有相关数据(即与您的组相关的所有优惠券),就像普通的SELECT一样。但是,它可以与Containable一起使用。
您可以在自述文件中找到Linkable如何工作的示例。
(免责声明:我目前维护Linkable,但这不是我指向它的原因)
答案 1 :(得分:0)
您可以将查询重新转发到$this->Voucher->find
,然后使用该查询返回的关联组数据吗?正如你所说,通过TourOperator id找到组是没有问题的,而Groups / Voucher关系看起来就像是它的反面。