Laravel 5.3 Eloquent Model动态表属性

时间:2016-12-01 14:14:38

标签: php laravel eloquent laravel-5.3

感谢您提前的时间。如果您赶时间,请跳到粗体部分。

我有一个以下用例:应用程序的每个用户都使用他自己的一组前缀表作为Eloquent Models(即code_invoices的Invoice.php和code_clients的Client.php)。前缀在users表中定义(例如users.code)。

在Laravel 5.2中,通过读取用户登录后在运行时设置的配置(或会话)变量,我能够轻松设置Eloquent模型的$ table属性。一切正常,包括关系。 / p>

但是在5.3更新之后,在运行时设置的任何配置值现在在对象中返回null(会话值也是如此)。我从文档中知道会话现在在构造函数中不可用,建议的解决方法是中间件闭包,但是Eloquent类不能使用中间件闭包,因为它返回一个未定义的方法错误。

所以我的问题有两个:如何动态设置Eloquent的$ table属性和/或如何读取模型中的运行时配置值。

非常感谢任何帮助。

编辑: 我可以使用from()方法为模型指定表格。 这有效: $model = \App\ModelName::from('prefix_table')->first(); 但我真正的问题是关系。 这不起作用: $model = \App\ModelName::from('prefix_table')->with('relatedModel')->first()没有,因为相关模型不知道要使用哪个表前缀。

有意思,对吧? :)

2 个答案:

答案 0 :(得分:1)

要从配置中读取,您可以执行以下操作:$value = config('app.timezone'); 阅读documentation了解更多

并设置$table你可以在模型中执行此操作:

protected $table = 'my_flights'; 

答案 1 :(得分:0)

我使用类似的东西用于非常糟糕的用例:

String