我正在使用控制器中的验证更新用户表。我为同一控制器中的两个表创建了相同的验证。当我使用此代码时: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();
});
因为
User::where('id',$data->user_id)
将返回Eloquent Builder
(这是一种查询生成器,但不是Model或Model的集合,直到您调用get
的first
或要检索结果的东西,否则将有作为结果的模型),而不是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));
应该正常工作