как фильтровать с оператором laravel - PullRequest
0 голосов
/ 07 октября 2019

Мне возвращают группу учетных записей, и каждая учетная запись имеет ряд отношений с ними (учетные записи, связанные с другими учетными записями). Следующее:

return AccountGroup::with(['account.relationships'])

Возвращает учетные записи с другими учетными записями, которые связаны с ним, тогда данные будут выглядеть так:

0: {accountId: 37868, name: "Random", ...}
accountId: 37868"
irdNumber: "72038410"
name: "Random"
relationships: [{relationshipId: 16851, loginId: 506, accountId: 37868, statusId: 1, groupId: 2},…]
0: {relationshipId: 16851, accountId: 37868, statusId: 1}
accountId: 37868
relationshipId: 16851
statusId: 1
1: {relationshipId: 16871, accountId: 37868, statusId: 1}

Теперь я хочу вернуть те отношения, которые имеютидентификатор учетной записи отношения = accountid, то есть где accountId = relationship.accountId

Как мне поступить? Я прочитал о whereColumn, но не уверен, что это уместно ...

Отношения являются вызываемыми в модели счетов:

public function relationships()
{
    return $this->hasMany('\App\Entities\Security\Relationship\Relationship', 'accountId');
}

Это затем возвращает массив отношений противрассматриваемый аккаунт, я хочу отфильтровать те, которые не имеют отношения .accountId = accountId

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вы можете отфильтровать отношения, загруженные с помощью with, используя синтаксис массива:

return AccountGroup::with(['account.relationships' => function ($query) {
   // Filter `account.relationships` according to your needs
   $query->where('accountId', ...);
}])

Более подробная информация здесь: https://laravel.com/docs/master/eloquent-relationships#constraining-eager-loads


Другой подход заключается в определенииПользовательские отношения в модели AccountGroup для этой конкретной потребности:

В вашей AccountGroup модели:

public function relationships()
{
    return $this->hasMany('\App\Entities\Security\Relationship\Relationship', 'accountId', 'accountId');
}

Тогда:

return AccountGroup::with(['relationships'])
1 голос
/ 07 октября 2019

Я считаю, что вы ищете

whereHas('relationship', function($query) {
    // filter
})

https://laravel.com/docs/master/eloquent-relationships#querying-relationship-existence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...