4

id由于 query.php 中的某些方法硬编码为列,我在 Laravel 中遇到了一些查询问题。因此,如果您在数据库中使用除 id 之外的其他名称,这些函数将惨遭失败。

在我的情况下,我有一个现有的 MSSQL 数据库,用户表的标识列UserId不是id。在我的情况下,问题出现在用户登录后 - 脚本 barfs:

SELECT TOP 1 [userid] FROM [User] WHERE [id] = ?

当试图检索用户数据时,Fluent 似乎调用了其中一个有问题的函数,在 query.php 中找到。有没有人解决过这个问题,如果有,你是如何处理的?

更新:

Auth::check()我确实使用 Fluent 作为 Auth 驱动程序,并且在执行or时触发了错误Auth::guest()。堆栈跟踪如下所示:

#0 C:\laravel\database\connection.php(183): Laravel\Database\Connection->execute('SELECT TOP 1 [u...', Array)
#1 C:\laravel\database\query.php(709): Laravel\Database\Connection->query('SELECT TOP 1 [u...', Array)
#2 C:\laravel\database\query.php(653): Laravel\Database\Query->get(Array)
#3 C:\laravel\database\query.php(624): Laravel\Database\Query->first(Array)
#4 C:\laravel\auth\drivers\fluent.php(21): Laravel\Database\Query->find('162')
#5 C:\laravel\auth\drivers\driver.php(79): Laravel\Auth\Drivers\Fluent->retrieve('162')
#6 C:\laravel\auth\drivers\driver.php(65): Laravel\Auth\Drivers\Driver->user()
#7 C:\laravel\auth\drivers\driver.php(55): Laravel\Auth\Drivers\Driver->check()
4

2 回答 2

5

您的问题有两种解决方案:

  1. 不要使用 Eloquent(我从你的问题推断出你正在使用)。相反,请使用 Fluent,例如

    $users = DB::table('users')->where('UserId', '=', 1)->first();
    

    虽然这种方法是有限制的,而且会阻止你使用 Eloquent。

  2. 像这样定义你的模型:

    class User extends Eloquent {
        public static $key  = 'UserId';
        public static $table = 'users';
    }
    

    where$key是主键$table的名称,是表的名称(如果它不是模型名称的复数,则很有用)。我猜这看起来不错,但不幸的是,如果您使用关系可能还不够。查看此解决方法以获取更多信息。

于 2013-01-22T22:12:41.423 回答
0

在 Laravel 4.* 中,自定义 id 应该被重新定义

class User extends Eloquent {
    protected $primaryKey = "UserID";
}
于 2014-10-29T11:14:26.923 回答