Имеется две таблицы tickets и result_ticket (тикеты и результаты конкретного тикета). Полагаю, при создании тикета можно сделать так, чтобы вслед за строкой в tickets создавалась строка и в result_ticket, причем чтобы у результата айди был привязан к этому же тикету. В документации не нашел такого, все примитивно, там создается лишь одна запись в бд. А как можно помимо этой строки создать еще одну строку в другой таблице (они связаны отношением tickets-result_ticket как один-к-одному), да еще и связать их (в таблице result_id имеется поле ticket_id). Пока что имеется такой рабочий код. PHP: public function store(TicketsRequest $request) { $person = User::with('person.tickets') ->find(Auth::user()->id); $ticket = new Ticket(); $ticket->person_id = $person->person->id; $ticket->type = $request->ticket_type; $ticket->name = $request->ticket_name; $ticket->description = $request->ticket_description; $ticket->date_off = $request->ticket_date_off; $ticket->save(); return redirect()->route('tickets.index')->with('success', 'Тикет успешно добавлен'); } Есть у меня одна мысль. Может быть, в этом методе можно вызвать метод store контроллера ResultTicketController? Но даже если и так, то как передать только что созданный айди тикета?
1. А почему создание экземпляра, а не статический вызов? PHP: $ticket = Ticket::create($request); 2. А что-же нет никакой валидации? 3. Можно и нужно, например так же PHP: ResultTicket::create($data): , а id в $ticket->id
1. Потому что создание экземпляра мне удобнее. 2. Валидация есть, она в TicketRequest. Зачем загромождать методы контроллера? 3. ticket_id в этом методе уже доступен? Т.е. Laravel заранее подготовил значение айди? Что в $data надо передать? Полагаю, строка будет выглядеть так: PHP: $result_ticket = ResultTicket::create(['ticket_id' => $ticket->id, 'еще какое-то поле в таблице' => 'какое-то значение']) ?
Да, решил проблему. Именно такая строка и сработала. Только возникла ошибка, но пофиксил ее добавлением в модель: PHP: protected $fillable = ['ticket_id', 'total', 'yes', 'no', 'other']; Добавил блок кода в метод store: PHP: if($request->ticket_type == 'Голосование') { $result_ticket = ResultTicket::create(['ticket_id' => $ticket->id, 'total' => 0, 'yes' => 0, 'no' => 0, 'other' => 0]); } Вдруг кому-нибудь когда-нибудь пригодится это
Если прописана связь, можно использовать метод save: https://laravel.com/docs/7.x/eloquent-relationships#inserting-and-updating-related-models, хотя он наиболее удобен, когда многие-ко-многим, или полиморфная связь, т.е. когда надо заполнить больше чем одно поле. Для один-ко-многим и один-к-одному не всегда им пользуюсь. @lordconst ты вроде вообще русскую доку смотришь, и не нашёл?