Laravel primaryKey覆盖忽略 - 查询返回未知列错误

时间:2017-12-21 22:08:26

标签: php laravel primary-key laravel-5.5

我正在使用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

1 个答案:

答案 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”一节下。