CakePHP-检索深度关联数据

CakePHP-检索深度关联数据,php,cakephp,cakephp-2.3,Php,Cakephp,Cakephp 2.3,我在尝试从另一个关联模型检索关联模型数据时遇到问题 我有捐赠者模型,它与血型模型(belongsTo/hasmanyrel)相关。 现在,我还有一个捐赠模型,它与捐赠模型(同样,属于/hasmanyrel)相关联 从捐赠模型,我想从血型模型检索数据 目前只检索与捐赠者相关的数据。我的想法是,我不在捐赠中添加血型字段,而是通过进行捐赠的捐赠者动态绘制捐赠的血型 我一直在检查可包含的行为,但我不确定我是否可以这样做!它似乎用于“包含”和过滤关联模型中的数据,而不是扩展关联 一如既往,非常感谢您的帮助

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

我有
捐赠者模型
,它与
血型模型(belongsTo/hasmanyrel)
相关。 现在,我还有一个
捐赠模型
,它与
捐赠模型(同样,属于/hasmanyrel)
相关联

捐赠模型
,我想从
血型模型
检索数据

目前只检索与捐赠者相关的数据。我的想法是,我不在捐赠中添加血型字段,而是通过进行捐赠的捐赠者动态绘制捐赠的血型

我一直在检查
可包含的行为
,但我不确定我是否可以这样做!它似乎用于“包含”和过滤关联模型中的数据,而不是扩展关联

一如既往,非常感谢您的帮助

[编辑]

供体模型

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(
$this->generation->recursive=2;
)。如果您想从捐赠中输出血型数据。试试看。

不清楚你到底想要得到什么数据,但要回答你似乎希望得到什么:

“从捐赠模型中,我想从血型组中检索数据 模型。”

因为有一个相关的路径,你可以从捐赠模型中获得血型数据,如下所示:

$this->Donor->BloodGroup->find('all');
或使用可容纳的:

$this->find('all', array(
    'contain' => array(
        'Donor' => array(
            'BloodGroup'
        )
    )
));
有很多选择——这取决于你需要什么样的数据

有关仍然分页时如何在模型中使用find()s的详细信息,请参阅以下答案:


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

你能从模型中粘贴代码吗?协会。以及您正在使用的
find
调用。是否尝试更改find调用中递归参数的值?@cornelb我更新了我的问题!arilia我应该将递归设置为什么?说实话,我甚至还没有使用递归,因为我不完全理解它是如何使用的。嗨,Miheretab!我不确定我是否跟随!我想从捐赠中检索血型数据,而不是反过来!谢谢你的回答,我会试试的!我唯一关心的是,我能用paginate而不是find()来完成这项工作吗?看来,我无法用paginate()方法来完成这项工作!有什么想法吗?但我确实需要对结果进行分页,因此使用find而不是paginate并不重要;I don’我真的不喜欢。。