找不到列:使用模型参考的未知列,但使用对象参考laravel 6

问题描述 投票:0回答:1

我正在使用控制器中的验证更新用户表。我为同一控制器中的两个表创建了相同的验证。当我使用此代码时:User::where('id',$data->user_id)->update($this->validateField($data->user_id));它显示

错误:未找到列:1054未知的列'address_name'

这是正确的,因为用户表没有列“ address_name”,但是它可以与此代码一起使用而没有任何错误

$user = User::where("id",$data->user_id)->firstOrFail(); $user->update($this->validateField($data->user_id));

这两个代码之间有什么区别,为什么它不起作用(显示未知的列错误,为什么没有列错误也可以起作用?这是我的validateField方法

public function validateField($id)
{
  return request()->validate([
        'address_name' => 'required|string|max:255',
        'mobile' => 'required|numeric|digits_between:10,13',
        'land_line' => 'required|numeric|digits_between:10,13',
        'min_order' => 'required',
        'payment_method' => 'required',
        'open_time' => 'required',
        'close_time' => 'required',
        'address'=>'required|string|max:255',
        'city'=>'required|string|max:255',
        'country'=>'required|string|max:255',
        'is_active' => 'required',
        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255',
        'email' => 'required|email|max:255|unique:users,email,'.$id.',id,deleted,0',
        'password' => 'sometimes|required|min:8',

     ]);
}

我的用户表

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('email');
        $table->string('password');
        $table->string('mobile');
        $table->tinyInteger('user_role')->unsigned();
        $table->tinyInteger('is_active')->unsigned()->default(1);
        $table->datetime('last_login')->nullable();
        $table->tinyInteger('deleted')->unsigned()->default(0);
        $table->dateTime('created_at')->nullable();
        $table->dateTime('updated_at')->nullable();
        $table->integer('updated_by')->nullable();
        $table->rememberToken();

    });
php mysql model laravel-validation laravel-6
1个回答
0
投票

因为

User::where('id',$data->user_id)

将返回Eloquent Builder(这是一种查询生成器,但不是Model或Model的集合,直到您调用getfirst或要检索结果的东西,否则将有作为结果的模型),而不是firstOrFail一个模型,在您的情况下为用户模型。

代替而不是

User
    ::where('id',$data->user_id)
    ->update($this->validateField($data->user_id));

您愿意

User
    ::where('id',$data->user_id)
    ->firstOrFail()
    ->update($this->validateField($data->user_id));

应该正常工作

© www.soinside.com 2019 - 2024. All rights reserved.