Laravel: функция контроллера для удаления данных

Сначала я объясню таблицы и как работает код

таблицы

У меня есть:

  • проекты с полями: id, slug, order, public, pathheader и pathhome.
  • project_translations с полями: id, locale, project_id, заголовок и подпись.
  • клиенты с полями: id, name, slug и priority.
  • client_project с полями: id, client_id и project_id

Как работает код

Когда я создаю проект, я также создаю два перевода проекта (по одному для каждого языкового стандарта, например: «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'); } 

Надеюсь, эта работа для вас !!!