我有一个带有给定声明“类别”关系的包,如下所示:
public function category()
{
return $this->belongsTo(ProductCategory::class);
}
在实现包的应用程序中,关系被重新定义如下:
public function vintage()
{
return $this->belongsTo(Vintage::class, 'vintage_id', 'id');
}
public function category()
{
return $this->vintage();
}
当在应用程序端急切加载“Vintage”关系时,一切都很好,但在包端却不然。每次包尝试引用“类别”关系时,它都会触发对 SQL 数据库的调用来加载“类别”关系 - 我试图避免这种情况。
我的问题;有没有什么方法可以“别名”(或者无论你如何称呼它),让关系“Vintage”在包中与“Category”起到相同的作用?
我知道加载关系时,它会“按照定义”出现在关系列表中。 我正在考虑的一个选项是在应用程序端加载这两个关系,以便包可以在不生成 SQL 调用的情况下找到它。
也许使用动态关系。这允许您定义一个关系,该关系可以根据某些条件返回不同类型的相关模型。
public function category()
{
if ($this->shouldUseVintageRelation()) {
return $this->vintage();
}
return $this->belongsTo(ProductCategory::class);
}
public function vintage()
{
return $this->belongsTo(Vintage::class, 'vintage_id', 'id');
}
protected function shouldUseVintageRelation()
{
// Determine whether to use the 'vintage' relation.
// This could be based on a property of the model, a configuration setting, etc.
// For example:
return config('app.use_vintage_relation');
}