Eloquent查询获取每个结果的关系值

时间:2018-04-10 23:10:28

标签: php laravel laravel-5 eloquent

我试图根据当前查询的ID从另一个表中获取列的值,并将其应用于我的所有结果。

这些是我的关系:

Model" AttributeOption"

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

模型"属性"

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

我将结果集设为数组

$attributeResults = Attribute::whereIn('group_id', $attributes)->get()->toArray();

下面是查询结果的样本 -

  0 => array:7 [▼
    "id" => 13
    "group_id" => 11
    "label" => "Food item"
    "type" => 1
    "value" => null
    "created_at" => "2018-04-08 20:49:26"
    "updated_at" => "2018-04-08 20:49:26"
  ]

使用type列我想使用该值查找关系。我试图运行测试dd($attributeResults[0]->option)

我可以对我的Eloquent查询做些什么来获取查询期间的关系值吗?当它不再是一个对象(在本例中是一个数组)时,我不明白如何查找关系。

更新数据库表

结果type = 1我希望在attribute_options表格中查找并找到在这种情况下匹配的ID' text'。

Attribute_options表

id : 1
option : text

属性表

id : 13
group_id : 11
label : food item
type : 1
value : null

1 个答案:

答案 0 :(得分:1)

默认情况下,如果遵循命名约定,则在定义关系时不需要覆盖外键和本地键。如果您拥有AttributeOptionAttribute型号,并且关系为AttributeOption 有很多 Attribute,那么外键是Attributeattribute_option_id。在这种情况下,由于type用作外键,因此关系应定义如下:

<强> AttributeOption.php

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

<强> Attribute.php

public function attributeOption()
{
    return $this->belongsTo('App\AttributeOption', 'type');
}

要获取关系,请通过访问attributes&#34;动态属性&#34;来检索AttributeOption的{​​{1}}模型,例如:

attributes

AttributeOption::first()->attributes // collection of Attribute model Attribute::first()-> attributeOption // AttributeOption model 可用于eager load关系:

with