【发布时间】:2018-10-09 03:19:33
【问题描述】:
我正在尝试重构我的项目,将 App 文件夹下的所有代码都放入单独的作曲家包中。但是我遇到了一个阻止程序,我可以使用一些输入来解决:
为了简化,我想创建 2 个包,Core 和 Customers。我希望 Core 完全分离,不引用我的任何其他包。在Core 里面有一个模型叫做Business,在Customer 里面有一个模型叫做Customer。模型之间存在多对一的关系。当我想创建 Eloquent 关系方法时,问题就出现了。 Customer 依赖于 Core,所以这不是问题,$this->belongsTo(Business::class)。但是,要获得逆 Core 需要了解 Customer 模型,$this->hasMany(Customer::class)。
有没有办法解决这个问题?就像从我的Customer 包中注册Business 模型上的方法一样?还是我把一切都搞反了?
编辑
对于不熟悉 Laravel 的人,关系被定义为模型类中的函数
class Business extends Model {
public function customers() {
return $this->hasMany(Customer::class);
}
}
【问题讨论】:
-
我不使用 laravel,但从 PHP 的角度来看,
$this->hasMany(Customer::class)与$this->hasMany($someclass)相同,其中$someclass = Customer::class。因此,您可以在构造Core时将类名作为变量提供,从而通过注入它来打破依赖关系(如果这有意义的话)假设这都是运行时配置的东西。 -
是的,这是解决问题的一种方法。但是我在我的问题中忽略了周围的功能(这很愚蠢......)。
$this->hasMany(Customer::class)将被放置在一个名为customers()的函数中。这意味着我必须创建一个暗示存在关系的函数。我可以为每个“外部”关系创建一个魔术函数。但我不是那些的忠实粉丝......
标签: php laravel composer-php