【问题标题】:Accessing Related Model inside the mutator在 mutator 中访问相关模型
【发布时间】:2018-07-26 19:33:14
【问题描述】:

我对我的问题有疑问,所以让我解释一下..

我有这些模型,它们是 ProductProductVariant ,ProductVariant 与 Product 模型有“belongsTo”关系。产品模型与 Product 模型有“hasMany”关系产品变体

我的问题是……

我确实为产品的变化做了 createMany,就像

Product->variant()->create($variantProducts);

我想在 ProductVariant 模型上创建一些 mutator 来操作一个名为“sku”的列。

我的问题是,如何从 mutator 获取一些列值以从相关模型 ( Product ) 获取数据,在这种情况下,我想从 ProductVariant mutator 获取 Product 的 category_id

我尝试这样做,但它似乎不起作用

public function setSkuAttribut($v){
    // product() is belongsTo relation to the product model
    $cat = $this->product()->category_id;
    dd($cat);
}

但它返回给我这个错误

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$category_id

任何帮助将不胜感激..谢谢:)

【问题讨论】:

  • 去掉括号后还会报错吗? $cat = $this->product->category_id
  • 还是报错,现在报错是 Trying to get property of non-object
  • 这可能很愚蠢,但您确定$this 有附加产品吗?如果你dd($this->product) 你得到一个对象吗?

标签: laravel eloquent


【解决方案1】:

您将 product() 关系方法作为方法调用,这意味着您正在接收一个 Builder 实例。为了获取模型实例,您要么必须执行->product()->get()->category_id,这将在每次进行新查询,要么使用带有->product->category_id 的延迟加载,这将使用已加载的关系实例(如果存在)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2015-01-01
    相关资源
    最近更新 更多