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 у вас есть.

Другие вопросы по тегам