我的模型与其他表/模型有很多关系,如果我使用包含参数,例如在一个模型的结果中按字段排序,查询结果中的所有其他表都丢失了,并且必须手动写入包含参数,我怎么能得到所有相关模型数据无需手动编写?
$data = $this->Cv->find('first',
array(
'contain' => array('Cv_experience' => array('order' => 'Cv_experience.start_year desc'))));
我的模型与其他表/模型有很多关系,如果我使用包含参数,例如在一个模型的结果中按字段排序,查询结果中的所有其他表都丢失了,并且必须手动写入包含参数,我怎么能得到所有相关模型数据无需手动编写?
$data = $this->Cv->find('first',
array(
'contain' => array('Cv_experience' => array('order' => 'Cv_experience.start_year desc'))));
听起来您一直在依赖模型的recursive
属性。一旦你使用“包含”,那些过去自动进入的模型不再这样做,对吗?
答案是,您应该使用recursive
OR contain
,而不是两者。如果您使用contain
,则应将递归设置为 OFF ( $recursive = -1;
)。
至于使用哪个,强烈建议不要使用recursve
。在您的 AppModel 中将其设置为 -1,并在您需要其他数据时随时使用 Containable Behavior。除了简单的博客应用程序之外,递归对于任何东西都是不好的做法,我相信它甚至在 Cake 3 中被完全删除。
订购注意事项:您不能按包含的型号订购。“包含”创建多个查询,所以 - 如果你想做你正在尝试的事情,你需要使用 JOIN。