【发布时间】:2022-07-11 21:38:28
【问题描述】:
$attributes = $request->validated();
$worker = DB::transaction(function () use ($attributes) {
$worker = Worker::create($attributes);
$course = $worker->course()->create(['course_name' => $attributes['course_name']]);
$media = $course->media()->create(["filename" => fileUpload($attributes['doc_file'], 'Course'),"filetype" => "pdf"]);
$medical_data = $worker->medical_detail()->create(['expiry_date' => $attributes['expiry_date']]);
$document = $worker->document()->create(['doc_name' => $attributes['doc_name']]);
});
return success(new WorkerResource($worker), __('Workers created successfully'));
return [
'first_name' => ['required', 'string'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:workers,email'],
'last_name' => ['required', 'string'],
'phone_number' => ['nullable', 'numeric'],
'hourly_rate' => ['required', 'numeric'],
'birth_date' => ['required','date'],
'doc_file' => ['sometimes','file','mimes:jpeg,png,jpg,doc,docx,pdf,csv,xlsx'],
'course_file' => ['sometimes','file','mimes:jpeg,png,jpg,doc,docx,pdf,csv,xlsx'],
'medical_file' => ['sometimes','file','mimes:jpeg,png,jpg,doc,docx,pdf,csv,xlsx'],
'course_name' => ['sometimes','string'],
'doc_name' => ['sometimes','string'],
'medical_name' => ['sometimes','string'],
'expiry_date' => ['sometimes','date'],
];
}
。我正在这样工作。这是一个好习惯吗? media 与course、medical_detail 和document 有许多多态关系。并且worker与course、medical_detail和document有一种关系。我在这里发现的问题是,如果缺少任何一个属性字段,它就会出错,如果课程创建失败,那么 media->course()-> 会出错吗?什么是更好的方法?这种方法会影响性能吗?来这里优化代码
【问题讨论】:
-
这段代码看起来不完整,因为您显示的是返回部分,而不是顶部。另外,我不确定您为什么要像这样做那样放入返回数组。通常您应该创建一个 Request 对象,该对象又包含所有规则和消息。 laravel.com/docs/9.x/validation#creating-form-requests 此外,AFAIK、
DB::transaction不会从自身返回值。$worker可能为空/null。您可以在DB::transaction()的闭包内返回一个值,然后获取它,但在您的示例中,您似乎没有这样做。
标签: laravel database performance optimization eloquent