我正在建立一个多租户网站,其中每个帐户都有自己的一组用户...在我的用户控制器中,我有一个update
方法,用以下方式提取用户:
$user = User::whereUsername($username)
->leftJoin('accounts', 'accounts.id', '=', 'users.account_id')
->where('accounts.id', '=', DB::raw('users.account_id'))
->where('accounts.subdomain', '=', $subdomain)
->firstOrFail();
问题是,当我$user->id
时,它会给我accounts.id
而不是......
我能够通过添加->select('users.id as id')
来解决此问题,但我想知道它为什么会发生以及是否有更好的方法来避免它。我认为,因为我从users
中选择users
表中的列将在任何命名冲突中优先考虑...
答案 0 :(得分:0)
Laravel无法知道哪个ID应该优先。通常情况下,如果您尝试在SQL中选择它,您将收到一条错误消息,指出id很危险。您可以使用其表名在SQL中选择它。为避免在Laravel中出现混淆,您可以在select语句中使用别名。你做到了,这很好。尝试将数据库相关任务移出控制器。