1

我正在尝试在分页查询中使用可包含。完整的代码如下。

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

直接关联(投票和艺术家)被选中,但图像和流派没有。这是正在生成的 SQL:

SELECT COUNT(*) AS `count` FROM `tracks` AS `Track` LEFT JOIN `artists` AS `Artist` ON (`Track`.`artist_id` = `Artist`.`id`) WHERE `Track`.`pending` = 0 AND `Track`.`status` = 1

SELECT `Track`.`id`, `Track`.`slug`, `Track`.`name`, `Track`.`featured`, `Track`.`plays`, `Track`.`vote_score`, `Track`.`vote_week_score`, `Track`.`video`, `Track`.`status`, `Track`.`created`, `Artist`.`name`, `Artist`.`id`, `Artist`.`slug`, `Artist`.`city`, `Artist`.`genre_id` FROM `tracks` AS `Track` LEFT JOIN `artists` AS `Artist` ON (`Track`.`artist_id` = `Artist`.`id`) WHERE `Track`.`pending` = 0 AND `Track`.`status` = 1 ORDER BY `Track`.`vote_week_score` DESC LIMIT 20

SELECT `Vote`.`vote_type_id`, `Vote`.`id`, `Vote`.`track_id` FROM `votes` AS `Vote` WHERE `Vote`.`created` > '2011-09-26' AND `Vote`.`created` <= '2011-10-03' AND `Vote`.`track_id` IN (24, 35, 31, 25, 27, 34, 56, 58)

蛋糕没有得到更深层次的联想。这是 Containable + paginate 的限制还是我遗漏了什么?

谢谢!

4

3 回答 3

1

Check if you have zero value for recursion property of the model.

$this->Post->recursive = 0;

After hours of headbanging removing the above line fixed it for me

于 2013-12-31T15:26:05.223 回答
0

确保附加行为:

$this->ModelName->Behaviors->attach('Containable');
于 2014-02-12T20:58:34.193 回答
-2

如果您在 AppController 中设置了 $uses,则问题可能出在您的控制器中。

示例:
假设您的控制器是 ProductsController,您的模型是 Product,您的数据库表是 products。此外,您的模型中可能设置了某种关联。

如果您没有在 Controller 中设置 $uses,而是在 AppController 中设置它,Cake 会假定数据库表正确并且工作正常。但他不会查找您的模型文件,因为它没有出现在 $uses(在 AppController 中定义的那个)中。

因此,如果您在控制器中编写它,它将起作用:

public $uses = array('Yourmodel');

还:

  1. 您不必设置“递归”,这就是包含存在的原因
  2. 不要忘记获取包含 ex 中的外键: Product 'fields'=>array('category_id'); 类别'字段'=>'product_id'
于 2012-09-26T20:08:34.387 回答