从Laravel 5.8中的关系中获取关系中的值

问题描述 投票:2回答:1

所以我在approved_quote模型上有一个jobs关系。

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,因此它不起作用。

有关如何实现这一点的任何建议? (最好不要在approved_quote_id上有jobs但是如果需要的话,我会这样做)。

laravel laravel-5 relationship
1个回答
1
投票

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

Models

  • 工作
  • JobProduct
  • JobQuote

Relationships

  • Job HasOne JobProduct
  • Job HasMany JobQuote
  • JobQuote属于JobProduct

Solution

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.