我在Laravel中遇到了一些问题,因为query.PHP中的某些方法有一个硬编码的id作为列.因此,如果在数据库中使用除id之外的其他名称,这些函数将失败.
在我的情况下,我有一个现有的MSsql数据库,用户表的标识列是UserId而不是id.在我的情况下,问题出现在用户登录后 – 脚本barfs:
SELECT TOP 1 [userid] FROM [User] WHERE [id] = ?
在尝试检索用户数据时,Fluent似乎调用了其中一个有问题的函数,在query.PHP中找到.有没有人解决这个问题,如果是这样,你是如何处理的?
更新:
我使用Fluent作为Auth驱动程序,并在执行Auth :: check()或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()
解决方法
您的问题有两种解决方案:
>不要使用Eloquent(我从你的问题中推断出那就是你正在使用的).相反,请使用Fluent,例如
$users = DB::table('users')->where('UserId','=',1)->first();
虽然这种方法具有限制性,但是,阻止您使用Eloquent.
>像这样定义你的模型:
class User extends Eloquent { public static $key = 'UserId'; public static $table = 'users'; }
其中$key是主键的名称,$table是表的名称(如果不是模型名称的复数,则非常有用).这看起来很棒我想但不幸的是,如果你使用关系可能还不够.有关更多信息,请查看此workaround.