CakePHP可包含和分页-未出现深层关联
我试图在分页查询中使用containable。代码全文如下CakePHP可包含和分页-未出现深层关联,cakephp,cakephp-1.3,containable,Cakephp,Cakephp 1.3,Containable,我试图在分页查询中使用containable。代码全文如下 $this->paginate = array( 'conditions'=>array( 'Track.pending'=>0, 'Track.status'=>1 ), 'contain'=>array( 'Vote'=>array( 'c
$this->paginate = array(
'conditions'=>array(
'Track.pending'=>0,
'Track.status'=>1
),
'contain'=>array(
'Vote'=>array(
'conditions'=>array(
'Vote.created >'=>$start,
'Vote.created <='=>$end
),
'fields'=>array(
'Vote.vote_type_id',
'Vote.id',
),
),
'Artist'=>array(
'Image'=>array(
'fields'=>array(
'Image.name'
)
),
'Genre'=>array(
'fields'=>array(
'Genre.name'
)
),
'fields'=>array(
'Artist.name',
'Artist.id',
'Artist.slug',
'Artist.city',
'Artist.genre_id'
)
)
),
'fields'=>array(
'Track.id',
'Track.slug',
'Track.name',
'Track.featured',
'Track.plays',
'Track.vote_score',
'Track.vote_week_score',
'Track.video',
'Track.status',
'Track.created'
),
'order'=>$order
);
$this->paginate=array(
“条件”=>数组(
'Track.pending'=>0,
“跟踪状态”=>1
),
'包含'=>数组(
“投票”=>数组(
“条件”=>数组(
“Vote.created>”=>$start,
'Vote.created'2011-09-26'和'Vote`.'created`如果您在AppController中设置了$uses,那么问题可能是控制器中的$uses
示例:
假设您的控制器是ProductsController,您的模型是Product,您的数据库表是products。此外,您的模型中可能设置了某种关联
如果您没有在控制器中设置$uses,而是在AppController中设置它,Cake会正确地假定数据库表并正常工作。但他不会查找您的模型文件,因为它没有出现在$uses(AppController中定义的)中
因此,如果您在控制器中写入:
public $uses = array('Yourmodel');
此外:
您不必设置“递归”,这就是contain存在的原因
不要忘记在contain ex:Product'fields'=>array('category\u id');category'fields'=>Product\u id'中获取外键
检查模型的递归属性是否为零值
$this->Post->recursive = 0;
在几个小时的头部撞击后,移除上面的线为我修复它请确保您附加了以下行为:
$this->ModelName->Behaviors->attach('Containable');
您是否尝试过在没有分页的情况下获取数据?我猜,您也不会在那里获取数据。我不确定这是否有用,但我经常发现联接比可包含的工作得更好—但不确定原因。@Dave,谢谢,是的,我在其他地方有代码可以在没有分页的情况下获取相同的数据,并且它按照我希望的方式工作。您不应该这样做如果要使用“uses”,您应该使用“loadModel”。此外,不需要显式加载关联的模型,因为cake应该负责这一点。在这里加载额外的模型是无用的。Contain已知不适用于“hasMany”关系,因此在这里使用备受鄙视的“recursive”是唯一的解决方案(请确保至少使用级别2,否则也无法获得所有数据)。
$this->ModelName->Behaviors->attach('Containable');