CakePHP可包含和分页-未出现深层关联

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

我试图在分页查询中使用containable。代码全文如下

    $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');