Laravel:使用带有where子句的透视表获取单个模型



我有3个表:

  • 汽车:属于许多车主
  • 车主:belongsToMany
  • CarOwner:Car和Owner的透视表,带有一个额外的列"活动",指示谁是当前车主

因此,一辆车可能有多个或没有车主,反之亦然,但一辆车只有一个当前("活动"(车主。

class Car extends Model
{
use HasFactory;

public function owners()
{
return $this->belongsToMany(Owner::class, 'car_owners');
}
public function currentOwner()
{
return $this->owners()->where('active', true)->first();
}
}

我的问题是,如果一辆车没有活动的车主,当我想在Blade模板中使用$car->currentOwner时,Laravel会抛出以下异常:

AppModelsCar::currentOwner must return a relationship instance, but "null" was returned. Was the "return" keyword used?

如果一辆车没有任何活跃的车主,我该如何处理?

您可以创建自定义属性而不是关系函数:

public function getCurrentOwnerAttribute()
{
return $this->owners()->where('active', true)->first();
}

最新更新