Запрос отношения Laravel, где используется массив - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь вернуть все атрибуты из моей базы данных, которые имеют заданный внешний ключ (группы атрибутов). Я установил все отношения в моей модели, но не уверен, как запросить эти отношения, используя коллекцию или массив.

AttributeGroup -

public function attribute()
{
    return $this->hasMany('App\Attribute', 'group_id');
}

Атрибут -

public function attributeGroup()
{
    return $this->belongsTo('App\AttributeGroup');
}

Мой текущий запрос -

$page = Page::where('slug', $slug)->firstOrFail();

$groups = AttributeGroup::where('page_id', $page->id)->get()->toArray();

$atts = Attribute::where('group_id', $groups[0]['id'])->get();

Это работает, потому что мы установили конкретный индекс массива, используя $groups[0]

Есть ли простой способ, которым я могу передать массив запросу, используя их взаимосвязи, или циклически перебирать результаты, а затем передавать свой собственный массив в запрос наилучшим способом?

$attributes = array();
foreach ($groups as $group){
   array_push($attributes, $group['id']);
}
$atts = Attribute::where('group_id', $attributes)->get();

1 Ответ

0 голосов
/ 30 апреля 2018

$groups - это коллекция . Предположим их как массивы на стероидах . Поэтому вы можете использовать метод pluck(), чтобы получить те идентификаторы, которые вам нужны:

$page = Page::where('slug', $slug)->firstOrFail();
$groups = AttributeGroup::where('page_id', $page->id)->get();
$atts = Attribute::where('group_id', $groups->pluck('id'))->get();

Кроме того, если вы правильно установили свои отношения, вы сможете просмотреть цикл $groups и получить доступ к атрибутам этих $groups. Вы можете проверить это:

$groups = AttributeGroup::where('page_id', $page->id)->get();
dd($groups->first()->attributes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...