我正在寻找一种让模块与使用 FuelPHP 的其他模块中的 ORM 模型进行交互的方法。
例如,如果我有一个名为 的模块products
,它将带有一些默认行为,即从产品表中选择产品等。这很好。
我试图解决的问题是允许可能存在或可能不总是存在的模块/包与产品模块进行交互。
例如,如果我启用了一个inventory
模块,它需要在产品模型中动态添加一个关系,以允许Model_Product::find()->get()
扩展以在必要时检索库存信息。所以上面的代码可以改为
Model_Product::find()->related('inventory')->get()
这演示了另一个问题,即在未加载清单模块时调用related('inventory')
代码将引发异常(并反过来创建关系)。
从概念上讲,我正在努力寻找一种让模块交互的方法。
我相信我可以通过在模型中创建类似于以下的方法来解决第一个问题
public static function _init()
{
$data = array(
'_has_many' => static::$_has_many,
[...]
);
$additional_relationships = \Event::trigger('event_name', $data, 'array');
foreach($additional_relationships as $key => $value)
{
static::$$key = $value;
}
}
但这似乎不太理想。它也没有解决第二个问题。