CakePHP:根据相关模型中的字段检索记录

CakePHP:根据相关模型中的字段检索记录

问题描述:

我正在尝试基于相关模型中的字段进行搜索。我可以使用belongsTo模型,但不能使用hasMany模型。我确信这是简单的我忽略但我看不到它。有人能指出我正确的方向(甚至是我需要的蛋糕册页 - 搜索,但没有发现任何看起来像这样的东西)。由于CakePHP:根据相关模型中的字段检索记录

在组控制器:(这不起作用)

$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,然后用它来拉组,使我希望他们在我看来,阵列是有序的。

你能重铸查询到$this->Voucher->find,然后使用从该查询返回的相关数据进行分组?正如你所说,通过他们的TourOperator id找到组是没有问题的,而Groups/Voucher关系看起来好像是相反的。

+0

我正在考虑尝试沿着这些方向行事。返回的数组是凌乱的工作与我的目的,但让我思考,我已经结束了使用它。 '$ groups = $ this-> Group-> Voucher-> find('all',array('fields'=>'DISTINCT group_id','conditions'=> array('Voucher。status'=>'pending'))); \t \t $ group_ids = Set :: extract($ groups,'/ Voucher/group_id'); \t \t $ data = $ this-> Group-> find('all',array('conditions'=> array('Group.id'=> $ group_ids)));' 我得到一个清晰的列表组ID,然后使用这些组来拉动组,以便按照我的预期在阵列中排列阵列。 – 2011-04-09 04:01:09

使用CakePHP的Containable行为,您不能在hasMany和hasAndBelongsToMany关联中使用相关数据的条件。这是因为它使用单独的查询来获得这些关联。

但是,使用可链接行为,您可以使用来自hasMany关联的数据来过滤记录。行为可以在这里下载:https://github.com/Terr/linkable

Linkable使用标准JOIN来加入相关数据。这意味着它不会像所有正常的SELECT一样提取所有相关数据(即所有与您的组相关的优惠券)。但是,它可以与Containable一起执行这两个操作。

您可以在README中找到Linkable如何工作的示例。

(声明:我目前维持联性,但是这不是我点的原因吧)

+0

感谢您的链接Terr,我也会看看Linkable。 – 2011-04-09 04:10:22