create() должен иметь тип array (ошибка mailtrap в laravel)
Я создаю систему управления жалобами и настраиваю mailtrap в laravel для отправки писем. Я хочу, чтобы когда пользователь добавлял новую жалобу, администратору автоматически отправляется электронное письмо с "новой жалобой". Я написал простой код в функции добавления новой жалобы в контроллере, но когда я запускаю приложение, возникает ошибка, которую я не понимаю.
TypeError Аргумент 1, переданный в Illuminate\Database\Eloquent\Builder::create(), должен иметь тип массив, данный объект, вызываемый в C:\xampp\htdocs\Complain-Management-System\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php в строке 23
Это моя функция создания:
public function create(Request $data)
{
// dd($data['user_id']);
$data->validate([
'type' => 'required',
'station' => 'required',
'description' => 'required|min:20|max:1000',
]);
Complaint::create([
'type' => $data['type'],
'station' => $data['station'],
'description' => $data['description'],
'comment' => $data['comment'],
'status' => $data['status'],
'user_id' => $data['user_id']
]);
$complaint = Complaint::create($data);
Mail::send('emails.test', $complaint->toArray(),function($message) {
$message->to('tm.talhamaqsood18@gmail.com', 'Test Mail')
->subject('Complaint Created');
});
return redirect()->route('all-complaints');
}
И это маршрут:
Route::post('complaints', [App\Http\Controllers\ComplaintController::class, 'create'])->name('new-complaint')->middleware('loggedIn');
1 ответ
Если
Complaint
является красноречивой моделью, вам нужно передать массив в
create
не объект запроса,
$data
это запрос. Не уверен, почему вы пытаетесь создать 2 жалобы (я предполагаю, что на основе тех же данных).
Если вам нужен только что созданный
Complaint
модель просто назначьте это
$complaint
после того, как вы создадите его с массивом:
$complaint = Complaint::create([
'type' => $data['type'],
'station' => $data['station'],
'description' => $data['description'],
'comment' => $data['comment'],
'status' => $data['status'],
'user_id' => $data['user_id']
]);
Нет необходимости в другом звонке
Complaint::create
у вас есть.