2015-08-13 3 views
1

У меня к таблицам: Users hasmany Memberhip. Я хотел бы построить запрос для получения ВСЕХ пользователей, но EACH User должен содержать только ПЕРВЫЙ членство (после заказа).Предел 'содержит' к первому (CakePHP 3)

$users = $this->Users->find()->contain([ 
    'Membership' => function ($q) { 
    return $q->order([ 
     'year' => 'ASC' 
    ])->limit(1); 
    }, 
    'Countries', 
    'Board', 
]); 

Кажется хорошим до сих пор. Проблема в том, что этот запрос получает только одно членство alltogether. Таким образом, в конце всех пользователей, которые выбраны, только один пользователь имеет одно членство.

Как получить CakePHP для получения ОДНОГО членства для КАЖДОГО пользователя?

Спасибо!

+2

Возможный дубликат [Загрузка данных связанной модели в Cakephp3] (http://stackoverflow.com/questions/30241975/loading -associated-модель-данных в-cakephp3) – ADmad

ответ

0

Вы можете сделать это путем создания другой ассоциации (Убедитесь, что вы не включают ограничение вам не нужно один как hasOne ассоциации создает предел):

$this->hasOne('FirstMembership', [ 
'className' => 'Memberships', 
'foreignKey' => 'membership_id', 
'strategy' => 'select', 
'sort' => ['FirstMembership.created' => 'DESC'], 
'conditions' => function ($e, $query) { 
    return []; 
}]); 

Это работает для ограничивающими 1, но если вы хотите ограничить до 10, все равно, похоже, нет хорошего решения.

1

Сортировать ключ для варианта hasOne не существует (см: CakePhp3 issue 5007)

Во всяком случае у меня была такая же проблема, и благодаря РПС: here his solution

0

Я закончил с использованием этого:

$this->hasOne('FirstPhoto', [ 
     'className' => 'Photos', 
     'foreignKey' => false, 
     'conditions' => function (\Cake\Database\Expression\QueryExpression $exp, \Cake\ORM\Query $query) { 
      $subquery = $query 
       ->connection() 
       ->newQuery() 
       ->select(['Photos.id']) 
       ->from(['Photos' => 'photos']) 
       ->where(['Photos.report_id = Reports.id']) 
       ->order(['Photos.id' => 'DESC']) 
       ->limit(1); 

      return $exp->add(['FirstPhoto.id' => $subquery]); 
     } 
    ]); 

Код: How to limit contained associations per record/group?

Смежные вопросы