我正在尝试发送发帖请求,它给了我这个错误。我认为该错误是由控制器中的某物引起的,但我不知道这是什么。我已经提供了所有相关代码。谁能帮我解决错误?
SQLSTATE [23000]:违反完整性约束:1048列 “ first_name”不能为空(SQL:插入
users
(first_name
中,last_name
,phone_number
,password
,updated_at
,created_at
)值(?,?,?,?,?,2020-02-26 07:54:56,2020-02-26 07:54:56))
控制器:
public function store(Request $request)
{
$user = new User();
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->phone_number = $request->phone_number;
$user->password = $request->password;
$user->save();
return new UserResource($user);
}
型号:
class User extends Model
{
protected $guarded = [];
}
UserResource:
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'email' => $this->email,
'phone_number' => $this->phone_number,
'password' => $this->password
];
}
}
迁移:
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('phone_number');
$table->string('password');
$table->timestamps();
});
}
请求正文:
{
'first_name': 'ayman',
'last_name': 'tarig',
'email': 'ayman@email.com',
'phone_number': '010010100',
'password': '1234'
}
答案 0 :(得分:1)
首先,我认为您可以使用雄辩的ORM中的 Mass Assignment ,
来自Laravel雄辩的ORM文档
您还可以使用create方法将新模型保存在一行中。插入的模型实例将从该方法返回给您。但是,在执行此操作之前,您将需要在模型上指定可填充或受保护的属性,因为默认情况下,所有Eloquent模型都可以防止大规模分配。
为了使您的字段更新,您需要使用Eloquent模型的fillable
数组:
class User extends Model
{
protected $guarded = [];
protected $fillable = [
'id',
'first_name',
'last_name',
'email',
'phone_number',
'password',
];
}
您希望使用自定义请求来验证提供的数据格式正确且不为空: laravel.com/docs/master/validation#form-request-validation
对于更复杂的验证方案,您可能希望创建一个“表单请求”。表单请求是包含验证逻辑的自定义请求类。
如下:
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email',
'phone_number' => 'required',
'password' => 'required'
];
}
答案 1 :(得分:0)
如果通过html表单发出此请求,请确保正确拼写的每个输入的名称。如果您使用的是邮递员,请确保已发送了发帖请求,因为一切都很好。
答案 2 :(得分:0)
确保您导入Illuminate \ Http \ Request
use Illuminate\Http\Request;
然后使用邮递员尝试调用您的post方法。