Laravel关系查询使用数组

时间:2018-04-30 09:25:33

标签: php laravel laravel-5 eloquent

我正在尝试从数据库中返回具有设置外键(属性组)的所有属性。我在模型中设置了所有关系,但我不确定如何使用集合或数组查询这些关系。

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 :(得分:2)

$groupscollectionAssume them as arrays on steroids。因此,您可以使用pluck()方法获取所需的ID:

$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);