我试图在livewire中创建一个系统,允许用户添加/编辑房屋,但也允许在每个房屋中添加/编辑房间。
我创建了house
和room
模型以及createHouse
和嵌套room
刀片文件。房子的细节得到保存,但房间没有。我相信我需要使用$emitUp
将roomid和name参数传递回House组件,但我显然做错了什么。
views/livewire/houses/createHouse.blade.php
<div role="dialog" aria-modal="true" aria-labelledby="modal-headline">
<form>
<div class="w-1/2 pr-4">
<div class="mb-4">
<label for="input1">Address1:</label>
<input type="text" id="input1" placeholder="Enter Address" wire:model.defer="address1">
</div>
<div class="mb-4">
<label for="input2">Town:</label>
<input type="text" id="input2" placeholder="Enter Town" wire:model.defer="town">
</div>
</div>
<div class="w-1/2">
<h3 class="mb-2">Rooms</h3>
@foreach ($rooms as $key => $room)
@livewire('room-show', [$room])
@endforeach
<span>
<button wire:click.prevent="store()" type="button">
Save
</button>
</span>
</div>
</form>
</div>
字符串
views/livewire/rooms/room.blade.php
<div>
<input type="text" wire:keydown="$emitUp('roomNameUpdated', '{{ $id }}', '{{ $name }}')"
id="roomName" wire:model.defer="name" placeholder="Name">
</div>
型
http/Livewire/Houses.php
<?php
namespace App\Http\Livewire;
use App\Models\House;
use App\Models\Room;
use Livewire\Component;
class Houses extends Component
{
public $houses, $address1, $town;
public $isOpen = 0;
protected $listeners = ['roomNameUpdated' => 'updateRoomName'];
public function render()
{
$this->houses = House::all();
return view('livewire.houses.houses');
}
public function updateRoomName($id, $name)
{
//I want to update the room name here
// But $name doesn't show the updated name and $id isn't recognised
}
public function store()
{
//Update the house details
House::updateOrCreate(['id' => $this->house_id], [
'address1' => $this->address1,
'town' => $this->town
]);
//delete all rooms for this house
Room::where('house_id',$this->house_id)->delete();
//re-add all rooms for this house
foreach($this->rooms as $room){
Room::updateOrCreate(['id' => $room->id], [
'house_id' => $this->house_id,
'name' => $room->name,
]);
}
session()->flash('message', $this->house_id ? 'House Updated Successfully.' : 'House Created Successfully.');
}
型
1条答案
按热度按时间j2datikz1#
@Urbycoz
传递$key作为索引(createHouse.blade.php)
字符串
传递名称和索引(room.blade.php)
型
更新存储方法
型
更新updateRoomName方法
型