【问题标题】:Getting a value from a relationship within a relationship in Laravel 5.8从 Laravel 5.8 关系中的关系中获取值
【发布时间】:2019-09-18 23:00:00
【问题描述】:

所以我的jobs 模型上有approved_quote 关系。

public function approved_quote()
{
    return $this->hasOne(JobQuote::class, 'job_id')->whereNotNull('approved_at');
}

我想撤回已引用的产品。我尝试了几种方法,但都有意想不到的结果。

尝试 1

public function quoted_job_products()
{
    return $this->hasMany(JobProduct::class, 'job_id')->where('job_quote_id', $this->approved_quote()->first()->id ?? 0);
}

但是$this->approved_quote->get(); 撤回了 14 条不真正相关(或正确)的记录,因此 ->first() 只是撤回了第一个错误的记录。

尝试 2

public function quoted_job_products()
{
    return $this->hasMany(JobProduct::class, 'job_id')->where('job_quote_id', $this->approved_quote->id ?? 0);
}

$this->approved_quote 返回 null,因此它不起作用。

关于如何实现这一点有什么建议吗? (最好在jobs 上没有approved_quote_id,但如果需要,我会这样做)。

【问题讨论】:

  • Wardie 可以和我们分享一下工作、报价和产品之间的关系吗?
  • 工作有很多引用。工作有一个接受的报价(报价与接受_at)。行情有产品。
  • 能否分享一下模特关系,这样我可以帮你吗?

标签: laravel laravel-5 relationship


【解决方案1】:

如何将该查询拆分成更小的部分?这不是一个完整的解决方案,但可能会有所帮助。不确定我的关系是否正确。

型号

  • 工作
  • 工作产品
  • 工作报价

关系

  • 工作有一个工作产品
  • Job HasMany JobQuote
  • JobQuote 属于 JobProduct

解决方案

class Job extends Model {
    public function jobQuotes()
    {
        return $this->hasMany(JobQuote::class);
    }

    public function approvedJobQuote()
    {
        return $this->jobQuotes()->whereNotNull('approved_at')->first()
    }

    public function approvedJobProduct()
    {
        return $this->approvedJobQuote()->jobProduct()
    }
}

class JobQuote extends Model {
    public function jobProduct()
    {
        return $this->belongsTo(JobProduct::class);
    }
}

【讨论】:

  • $this->approvedJobQuote()->jobProduct() 这是错误的。您不能在 query builder 实例上调用 realtionship。
  • 它不是在查询生成器上调用它,而是在上一步中 first() 返回的 JobQuote 实例上调用它
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 2020-05-03
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多