为什么我在Laravel的Eloquent ORM中将帐户ID作为用户ID

时间:2014-06-30 01:18:51

标签: php mysql laravel eloquent

我正在建立一个多租户网站,其中每个帐户都有自己的一组用户...在我的用户控制器中,我有一个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表中的列将在任何命名冲突中优先考虑...

1 个答案:

答案 0 :(得分:0)

Laravel无法知道哪个ID应该优先。通常情况下,如果您尝试在SQL中选择它,您将收到一条错误消息,指出id很危险。您可以使用其表名在SQL中选择它。为避免在Laravel中出现混淆,您可以在select语句中使用别名。你做到了,这很好。尝试将数据库相关任务移出控制器。