所以我的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
,但是如果需要的话,我会这样做。)
答案 0 :(得分:1)
如何将查询分成较小的部分?这不是最终的解决方案,但可能会有所帮助。不确定我的关系是否正确。
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);
}
}