Форма Laravel Livewire с несколькими строками и несколькими связанными выборамиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Форма Laravel Livewire с несколькими строками и несколькими связанными выборами

Сообщение Anonymous »

Я пытаюсь создать форму, которая создает новые строки по требованию. Каждая из этих строк имеет разные выборы, связанные друг с другом: когда одна обновляется, другая обновляет свой список опций. Но при обновлении выбора одной строки форма обновляет все строки.
Это корневая форма:

Код: Выделить всё

 @foreach ($lineasComponentes as $componente)








Eliminar

@endforeach
А это компоненты Livewire:
familias.blade.php

Код: Выделить всё

@foreach ($familias as $familia)
{{$familia->nombre}}
@endforeach

Familias.php

Код: Выделить всё

class Familias extends Component
{
public $formFamilia;
public $familia_id;
public $indexLoop;

public function mount()
{
$this->formFamilia = $this->familia_id;
}

public function updatedFormFamilia()
{
$this->dispatch('familiaSelected', familiaId: $this->formFamilia);
}

public function render()
{
$familias = DB::table('familias')
->whereNotIn('id', [8,9])
->get();
$ind = $this->indexLoop;
return view('livewire.form.familias', compact('familias', 'ind'));
}
}
sub-familias.blade.php

Код: Выделить всё

@foreach ($subfamilias as $subfamilia)
{{ $subfamilia->nombre }}
@endforeach

SubFamilias.php

Код: Выделить всё

class SubFamilias extends Component
{
public $formSubFamilia;
public $sub_familia_id;
public $familia_id;
public $indexLoop;

public function mount()
{
$this->formSubFamilia = $this->sub_familia_id;
}

#[On('familiaSelected')]
public function setFamilia($familiaId)
{
$this->familia_id = $familiaId;
}

public function updatedFormSubFamilia()
{
$this->dispatch(
'subfamiliaSelected',
subfamiliaId: $this->formSubFamilia,
familiaId: $this->familia_id
);
}

public function render()
{
$subfamilias = DB::table('factor_precios as fp')
->select('sf.id', 'sf.nombre')
->leftjoin('sub_familias as sf', 'sf.id', '=', 'fp.sub_familia_id')
->where('fp.familia_id', '=', $this->familia_id)
->where('sf.id', '!=', '3')
->get();
$ind = $this->indexLoop;
return view('livewire.form.sub-familias', compact('subfamilias', 'ind'));
}
}
comComponentes.blade.php

Код: Выделить всё

@foreach ($componentes as $componente)
{{ $componente->nombre }}
@endforeach

Componentes.php

Код: Выделить всё

class Componentes extends Component
{
public $formComponente;
public $componente_id;
public $familia_id;
public $sub_familia_id;
public $indexLoop;

public function mount()
{
$this->formComponente = $this->componente_id;
}

#[On('subfamiliaSelected')]
public function setFamilia($subfamiliaId, $familiaId)
{
$this->familia_id = $familiaId;
$this->sub_familia_id = $subfamiliaId;
}

public function render()
{
$componentes = DB::table('materials as m')
->select('m.id', 'm.nombre')
->where('m.familia_id', '=', $this->familia_id)
->where('m.sub_familia_id', '=', $this->sub_familia_id)
->get();
$ind = $this->indexLoop;
return view('livewire.form.componentes', compact('componentes', 'ind'));
}
}

резюме: я создал форму в Laravel с компонентами Livewire, которая добавляет новые строки по требованию. Каждая из этих строк имеет три выбора. Список опций во втором и третьем выборе зависит от того, что выбрано в предыдущем выборе. Каждый выбор — это активный компонент, связанный с предыдущим (каждое изменение запускает событие, которое фиксируется в следующем компоненте). Проблема в том, что когда я обновляю один из выбранных элементов, обновляется следующий компонент, но во всех строках, а не только в той, где обновляется компонент. Мне нужно, чтобы компоненты реагировали на компоненты в своей строке, а не обновляли все строки, как это происходит сейчас.
Извините за мой английский, я не носитель языка

Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-selects
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»