【发布时间】:2020-03-20 05:42:42
【问题描述】:
我正在使用控制器中的验证更新我的用户表。我为同一个控制器中的两个表创建了相同的验证。
当我使用此代码时: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();
});
【问题讨论】:
-
确定 firstOrFail 没有失败?
-
是的,它没有失败。只是想知道区别。很好解释。谢谢
标签: php mysql model laravel-validation laravel-6