【发布时间】:2016-12-01 14:14:37
【问题描述】:
提前感谢您的宝贵时间。如果您赶时间,请跳至粗体部分。
我有以下用例:应用程序的每个用户都为 Eloquent 模型使用他自己的一组前缀表(即,对于 code_invoices 的 Invoice.php 和对于 code_clients 的 Client.php)。前缀在 users 表中定义(例如 users.code)。
在 Laravel 5.2 中,我可以通过在用户登录后读取运行时设置的配置(或会话)变量来轻松设置 Eloquent 模型的 $table 属性。一切正常,包括关系。
但是,在 5.3 更新后,在运行时设置的任何配置值现在在对象中返回 null(会话值也是如此)。我从文档中知道 session 现在在构造函数中不可用,建议的解决方法是中间件闭包,但 Eloquent 类不能使用中间件闭包,因为它返回未定义的方法错误。
所以我的问题有两个:如何动态设置 Eloquent 的 $table 属性和/或如何读取模型中的运行时配置值。
任何帮助将不胜感激。
编辑:
我可以使用from() 方法为模型指定一个表。
这有效:
$model = \App\ModelName::from('prefix_table')->first();
但我真正的问题是关系。
这不起作用:
$model = \App\ModelName::from('prefix_table')->with('relatedModel')->first() 没有,因为相关模型不知道使用什么表前缀。
很有趣,对吧? :)
【问题讨论】:
-
在这种情况下,
DB::setTablePrefix($prefix)可能会派上用场。
标签: php laravel eloquent laravel-5.3