Вызовите функции сбора Eloquent - PullRequest
0 голосов
/ 13 июня 2018

Я создал модель отношений между 3 различными таблицами / моделями.

Поскольку я получаю коллекцию объектов из-за свойства hasMany, я должен использовать цикл for для доступа к каждому из методов Models вДля того, чтобы получить данные, которые я хочу.Можно ли как-нибудь сказать, что я хочу, чтобы он запускал одну и ту же функцию на всех объектах?

Псевдокод:

Model A     //HasMany Model B
Model B     //HasMany Model C, Belongs to A
Model C     //BelongsTo C


$foo = new User::Find(Auth::id());

//Need to loop the collection of data in order to get the information
foreach($foo->permissions as $permission)
{
    $name = $permission->permissionsTypes->name;
}

Я пытался сделать это:

$foo->permissions->permissionsTypes;

Но поскольку это коллекция, она не работает.

Есть ли другой способ получить эту информацию без циклического перемещения по массиву?

Спасибо за любые рекомендации!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Используйте pluck() и collapse():

$permissionsTypes = $foo->permissions->pluck('permissionsTypes')->collapse();
0 голосов
/ 13 июня 2018

Возможно, вы определили отношение hasMany, если да, тогда измените hasMany на hasOne, тогда

foreach($foo->permissions as $permission)
{
    $name = $permission->permissionsTypes->name;
}

Или вы можете просто получить один из объектов по его индексу:

{{ $permission[0]->name}}

Или получить первый объект из коллекции:

{{ $permission->first() }}

Когда вы используете find() или first(), вы получаете объект , поэтому вы можете получить свойства с помощью простого:

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