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’我真的不喜欢。。