Laravel 8 Каскадные выпадающие списки Livewire работают не так, как планировалось

#php #html #laravel #database #drop-down-menu

#php #html #laravel #database #drop-down-menu

Вопрос:

Я использую Laravel 8 и пытаюсь каскадировать некоторые выпадающие списки.

Я следовал некоторым учебным пособиям, но это на самом деле не работает для меня, так как моя структура базы данных немного сложнее, и я использую объединения.

Пример структуры базы данных: Таблица клиентов (Таблица Кундена) Таблица местоположений (Стандартная таблица) Таблица размещения клиентов (Таблица Kunde_Standorte)

У клиента может быть несколько местоположений и наоборот, поэтому мне нужна промежуточная таблица.

Компонентная логика:

 public $kunde = null; public $standort = null; public $projekt = null;  public $selectedKunde = null; public $selectedStandort = null; public $selectedProjekt = null;    public function mount(){   $this-gt;kunde = Kunde::all();  $this-gt;standort = collect();  $this-gt;projekt = collect();  }   public function render()  {  return view('livewire.dropdown');  }   public function updatedSelectedKunde($kunde_id)  {   if (!is_null($kunde_id)) //Check if a customer is selected  {  $this-gt;standort = Kunde_Standort::where('kunde_standorte.kunde_id', $kunde_id)  -gt;leftJoin('standorte', 'kunde_standorte.standort_id', '=', 'standorte.standort_id')  -gt;select('standorte.*', 'kunde_standorte.*')  -gt;get();   $this-gt;selectedStandort = null;  $this-gt;projekt = null;  $this-gt;selectedProjekt = null;  }  }  public function updatedSelectedStandort($kunde_standort_id)  {  if (!is_null($kunde_standort_id)) { //Check if a location is selected   $this-gt;projekt = Kunde_Standort_Projekt::where('kunde_standort_projekte.kunde_standort_id', $kunde_standort_id) //Fülle die Project Dropdown  -gt;leftJoin('projekte', 'kunde_standort_projekte.projekt_id', '=', 'projekte.projekt_id')  -gt;select('projekte.*', 'kunde_standort_projekte.kunde_standort_projekt_id')  -gt;get();    $this-gt;selectedProjekt = null;  }  }  

Вид:

 lt;div style="text-align: center"gt;  lt;select class="form-control" required wire:model="selectedKunde"gt;  lt;option value="" disable selected hiddengt;Wähle Kundelt;/optiongt;  @foreach($kunde as $item)  lt;option value ="{{$item-gt;kunde_id}}"gt;{{$item-gt;name}}lt;/optiongt;  @endforeach  lt;/selectgt;   @if (!is_null($selectedKunde))  lt;select class="form-control" wire:model="selectedStandort"gt;  lt;option value="" disable selected hiddengt;Wähle Standortlt;/optiongt;  @foreach($standort as $item)   lt;option value ="{{$item-gt;kunde_standort_id}}"gt;{{$item-gt;name}}lt;/optiongt;  @endforeach  lt;/selectgt;  @endif   @if (!is_null($selectedStandort))  lt;select class="form-control" wire:model="selectedProjekt"gt;  lt;option value="" disable selected hiddengt;Wähle Projektlt;/optiongt;  @foreach($projekt as $item)  lt;option value ="{{$item-gt;kunde_standort_projekt_id}}"gt;{{$item-gt;name}}lt;/optiongt;  @endforeach  lt;/selectgt;  @endif  

The issue is, as soon as I select a «standort/location» the project dropdown is correctly filled, but I loose all names in the location dropdown. The id´s are still there, and the number of empty spaces matches. I just dont understand why I loose all names when I jump one dropdown further.

This applies to all dropdowns, this is just an example, I have about 6 cascading dropdowns which all show this behaviour. As soon as I go one further, all previous (except the Customer Dropdown, I guess because its filled in the mount) dropdowns loose their names but keep their values/id´s.

Im really struggling with this. My current workaround is, to fill every previous dropdown again through multiple queries. This is extremely tedious and bad (since I make a ton of db calls) and the further/more dropdowns I get, the more previous drop downs I have to fill.

Since my database structure is relatively complex, its a pain in the butt.

Any advice is highly appreciated.