Сначала я объясню таблицы и как работает код
таблицы
У меня есть:
Как работает код
Когда я создаю проект, я также создаю два перевода проекта (по одному для каждого языкового стандарта, например: «es», «en»). а затем я выбираю клиента, и это делает отношение client_project.
Когда я удаляю проект, я одновременно удаляю project_translations, которые имеют одинаковые строки project_id и client_project, где project_id одинаково.
Что я хочу
Когда я удаляю клиента, удалите строку, в которой поле client_id имеет одно и то же значение (это работает), а затем удаляет проекты и проекты_трансляции проектов, которые имеют отношение к клиенту, который я удалял.
Как моя функция ищет момент
public function destroyClient($id) //Destruir cliente y todo lo relacionado de la bbdd { $cliente = Client::find($id); $cliente->delete(); //delete the client DB::table('client_project')->where('client_id',$id)->delete(); //delete the client_project relations which field client_id is the same that the client i just deleted. return redirect()->route('admin.clients'); }
Следующий код сначала получит все проекты, связанные с клиентом. А затем удалит все проекты клиента через цикл.
public function destroyClient($id) { $cliente = Client::find($id); $cliente->delete(); //delete the client // get list of all projects of client $projects = DB::table('client_project')->where('client_id',$id)->get(); DB::table('client_project')->where('client_id',$id)->delete(); // delete all projects of client foreach($projects as $project) { DB::table('projects')->where('id',$project->id)->delete(); DB::table('project_translations')->where('project_id',$project->id)->delete(); } return redirect()->route('admin.clients'); }
Надеюсь, это поможет вам
public function destroyClient($id) //Destruir cliente y todo lo relacionado de la bbdd { $cliente = Client::find($id); $cliente_project = DB::table('client_project')->where('client_id', $id)->first(); $project_id = $cliente_project->project_id; $cliente->delete(); //delete the client DB::table('client_project')->where('client_id',$id)->delete(); //delete the client_project relations which field client_id is the same that the client i just deleted. DB::table('projects')->where('id',$project_id)->delete(); DB::table('project_translations')->where('project_id',$project_id)->delete(); return redirect()->route('admin.clients'); }
Возможно, лучший способ – использовать ключи для ключей
Я думаю, вы можете попробовать это:
public function destroyClient($id) //Destruir cliente y todo lo relacionado de la bbdd { $cliente = Client::find($id); $cliente->delete(); //delete the client $project = DB::table('client_project')->where('client_id',$id)->first(); DB::table('client_project')->where('client_id',$id)->delete(); DB::table('projects')->where('id',$project->project_id)->delete(); DB::table('project_translations')->where('project_id',$project->project_id)->delete(); return redirect()->route('admin.clients'); }
Надеюсь, эта работа для вас !!!