Phantom Watson
Phantom Watson

Reputation: 2717

CakePHP 3: Setting options for 'contain' when paginating

What's the correct way to limit the number of contained associated records when paginating?

The docs don't appear to address how to set options for 'contain' while paginating, but $paginate['contain']['AssociatedModel']['limit'] = 1; seemed to make sense. However, that line is resulting the following error for me in CakePHP 3.1.3:

Fatal error: Unsupported operand types in ...\vendor\cakephp\cakephp\src\ORM\EagerLoader.php on line 312

The error being generated because, in the line $pointer[$table] = $options + $pointer[$table];, $options is 1 and $pointer[$table] is an array.

Confusingly, setting $paginate['contain']['AssociatedModel']['fields'] works as expected, but setting 'limit' or 'order' results in that same error.

Upvotes: 0

Views: 447

Answers (1)

Phantom Watson
Phantom Watson

Reputation: 2717

Despite the fact that setting $paginate['contain']['AssociatedModel']['fields'] = [...] works, other options need to be set using functions. The following code fixes my problem:

$paginate['contain']['AssociatedModel'] = function($q) {
    return $q
        ->select([...])
        ->limit(1)
        ->order([...]);
};

Upvotes: 1

Related Questions