【发布时间】:2014-12-13 15:43:50
【问题描述】:
我希望在我的应用程序中包含许多模型/模块,但其中一些会为某些客户删除。
现在我有这样的关系:
public function people()
{
return $this->hasMany('People', 'model_id');
}
当我运行 $model = Model::with('people')->get(); 时,它工作正常
但是如果People 模型不存在怎么办?
目前我得到:
ClassLoader.php 第 386 行中的 1/1 ErrorException:包含(...):失败 打开流:没有这样的文件或目录
我试过了
public function people()
{
try {
return $this->hasMany('People', 'model_id');
}
catch (FatalErrorException $e) {
return null;
}
}
或与:
public function people()
{
return null; // here I could add checking if there is a Model class and if not return null
}
但是当使用这种方法时$model = Model::with('people')->get(); 不起作用。
我将有几十个关系,我无法在with 中使用它们的列表。最好的方法是使用一些 empty relation(返回 null)只是为了让 Eloquent 不做任何事情,但在这种情况下,Eloquent 仍然试图让它工作,我会得到:
哎呀,好像出了点问题。 Builder.php 第 430 行中的 1/1 FatalErrorException:调用成员函数 addEagerConstraints() on null
有什么简单的解决办法吗?
【问题讨论】:
-
看起来很奇怪,你为什么要删除模型?
-
@JarekTkaczyk 如果客户不需要某些功能/不为他们付费,他们将没有此功能(例如那些带有模型的文件),但其他付费的客户应该有功能。而且我不想更改与可能被删除的模型相关的其他模型。这不完全是我的构想,但我试图找出是否可以做到。
-
我理解为客户启用/禁用功能的概念。我没有得到的是您使用 removig 文件实现它的方式。如果您交付代码,而不是 saas,那么我建议您创建独立的包,您可以根据客户端简单地插入或不插入。
-
@JarekTkaczyk 我将拥有一个可以显示人员列表的模块。如果未启用其他模块,它应该只显示人员列表,但如果启用模块 A,它还应该为每个人显示来自 A 模块(关系)的一些信息,如果启用模块 B,它应该显示来自 B 模块的一些信息并且可能如果启用了 A 和 B 模块,我将不得不在人员列表上显示来自 A 和 B 模块的信息。目前只是我的客户的概念,而不是最终的解决方案。也许你可以为此推荐一些其他的实现?
标签: laravel eloquent laravel-5