【发布时间】:2014-06-27 06:29:04
【问题描述】:
我对 Laravel 4 比较陌生,似乎找不到正确的答案,也许你可以帮忙:
我们应用程序中的一个用户可以有多个帐户,所有数据都与一个帐户相关,而不是一个用户。用户当前登录的帐户由子域定义,即 accountname.mydomain.com。
我们在 User 模型中添加了一个方法 account():
/**
* Get the account the user is currently logged in to
*/
public function account()
{
$server = explode('.', Request::server('HTTP_HOST'));
$subdomain = $server[0];
return Account::where('subdomain', $subdomain)->first();
}
问题是,当我们现在在视图或控制器中使用类似这样的东西时,总会有一个额外的查询:
Auth::user()->account()->accountname
当我们想要获取与帐户相关的“产品”时,我们可以使用:
$products = Product::where('account_id', Auth::user()->account()->id)->get();
又是一个额外的查询...
我们需要以某种方式扩展 Auth::user() 对象,以便帐户数据始终在其中……或者我们可以创建一个新的 Auth::account() 对象,并在那里获取数据。 .
对此最好的解决方案是什么? 提前致谢
【问题讨论】:
-
如何将模型存储到会话中
-
这也是我们的第一个想法,但我认为如果我们必须在任何地方都使用 Session::get('account_id') 会很丑。此外,用户可以将子域更改为另一个帐户,因此必须在每次请求时检查/更新会话。
-
从你写的来看,account()方法和User没有关系,所以你不应该把它放在User模型中,你可以在bootstrap/start.php的末尾添加它并调用@987654324 @(这不是最佳做法,请尝试让我们知道它是否有效)
标签: laravel laravel-4 eloquent