【问题标题】:Eloquent query get relationship value for every result雄辩的查询获取每个结果的关系值
【发布时间】:2018-09-20 16:36:04
【问题描述】:

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

这些是我的关系:

模型“属性选项”

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'。

属性选项表

id : 1
option : text

属性表

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

【问题讨论】:

  • type是什么关系?
  • 请澄清您的问题。查询后你到底想要什么?
  • 还有更新表
  • 更新了表格和示例数据
  • “我可以对我的 Eloquent 查询做些什么来获取查询期间的关系值吗?”您是否尝试在查询中使用with->('attributeOptions')?关于第二部分,我猜你可以使用 whereHas。更多信息laravel.com/docs/5.6/…

标签: php laravel laravel-5 eloquent


【解决方案1】:

默认情况下,如果遵循命名约定,我们在定义关系时不需要覆盖外键和本地键。那就是如果你有AttributeOptionAttribute模型,关系是AttributeOption有很多Attribute,那么Attribute的外键就是attribute_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“动态属性”来检索AttributeOptionattributes 模型,例如:

AttributeOption::first()->attributes // collection of Attribute model
Attribute::first()-> attributeOption // AttributeOption model

with 可用于eager load 的关系:

$attributeResults = Attribute::with('attributeOption')
    ->whereIn('group_id', $attributes)
    ->get(); // collection of attribute model

foreach ($attributeResults as $attributeResult) {
    $attributeOption = $attributeResult->attributeOption;
    ...
}

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-06-17
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2018-12-09
    • 2018-04-13
    • 2021-05-02
    相关资源
    最近更新 更多