我正在使用id列名为user_id的数据库。
我在用户模型中设置了$ primaryKey覆盖,但它仍然在寻找id
。当用户模型扩展Authenticatable时,它会被忽略。 Authenticatable扩展模态,所以不应该是一个问题,对吗?
我见过很多线程,其中primaryKey覆盖不起作用,但没有任何帮助。
访问用户时出错:
Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `members` where `email` = user@gmail.com and `id` <> 1804)
用户模型:
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $table = 'members';
protected $primaryKey = 'user_id';
更新产生错误:
public function rules()
{
$user = Auth::user();
return [
'email' => [
'required',
'email',
Rule::unique($user->getTable())->ignore($user->getKey()),
],
'first_name' => 'required',
'last_name' => 'required',
];
}
数据库栏:
Name | Type | Attributes | Null | Extra
user_id (PrimaryKey) | int(60) | Unsigned | No | AUTO_INCREMENT
答案 0 :(得分:3)
sql语句看起来像是唯一的验证规则会生成的。如果主键不是id
,则它具有指定主键的语法。
如果您的表使用的主键列名不是id,则可以在调用ignore方法时指定列的名称:
'email' => Rule::unique('users')->ignore($user->id, 'user_id')
来源:https://laravel.com/docs/5.5/validation#rule-unique,在“强制使用唯一规则忽略给定ID”一节下。