CakePHP-检索深层关联数据

时间:2014-02-03 15:37:03

标签: php cakephp cakephp-2.3

我在尝试从另一个关联模型中检索关联的模型数据时遇到问题。

Donor ModelBloodGroup Model (belongsTo/hasMany rel)相关联。 现在,我还有一个与Donation Model相关联的Donor Model (again, belongsTo/hasMany rel)

Donation Model,我想从BloodGroup Model检索数据。

目前仅检索捐赠者相关数据。我的想法是,我不会在捐赠中添加一个血型领域,而是通过捐赠捐赠的捐赠者来映射捐赠的血型组!

我一直在检查containable Behavior,但我不确定这是否是我能做到的!它似乎用于“包含”和过滤来自关联模型的数据,而不是扩展关联。

任何帮助都非常感激,一如既往!

[编辑]

捐赠者模式

class Donor extends AppModel{
    public $belongsTo = array(
        'BloodGroup'=> array(
            'className' => 'BloodGroup'
        ),
        'DonorType' => array(
            'className' => 'DonorType'
        )
    );
    public $hasMany = array(
        'Donation' => array(
            'className' => 'Donation',
            'foreignKey' => 'donor_id',
            'order' => 'Donation.created DESC',
            'limit' => 10,
            'dependent' => true
        )
    );

捐赠模式

public $belongsTo = array(
        'Donor' => array(
            'className' => 'Donor',
            'counterCache' => true,
        )
    );

来自捐赠控制者:

public $paginate = array(
        'order' => array("Donation.d_date" => 'desc'),
        'limit' => 10
    );
$this->Paginator->settings = $this->paginate;       
        $donations = $this->Paginator->paginate('Donation');
        $this->set('donations',$donations)

检索结果:

[donations] => Array 
(

[0] => Array
        (
            [Donation] => Array
                (
                    [id] => 1
                    [donor_id] => 4
                    etc..

                )
            [Donor] => Array
                (
                    [id] => 4
                    [name] => ...


                )
        )
)

2 个答案:

答案 0 :(得分:2)

目前尚不清楚您真正想要获得哪些数据,但要回答您的希望:

  

“从捐赠模型中,我想从BloodGroup中检索数据   模式“。

因为有相关路径,您可以从Donation模型中获取BloodGroup数据,如下所示:

$this->Donor->BloodGroup->find('all');

或使用Containable:

$this->find('all', array(
    'contain' => array(
        'Donor' => array(
            'BloodGroup'
        )
    )
));

有很多选择 - 它只取决于你需要什么数据。

有关如何在我的模型中使用find()的详细信息,请参阅此答案:https://stackoverflow.com/a/6577042/673664

(可能有很多方法可以做到这一点 - 这只是我使用的方法,对我来说非常有用)

答案 1 :(得分:0)

如果BloodGroup有很多Donor,如果Donor有很多捐赠,您可以从BloodGroup检索捐赠数据,但在使用$this->Donation->recursive = 2;方法之前必须将递归设置为2(find)。如果您想从捐赠中输出血型数据。试试吧。