Laravel Livewire - 选择后选择输入数据丢失
Posted
技术标签:
【中文标题】Laravel Livewire - 选择后选择输入数据丢失【英文标题】:Laravel Livewire - Select input data is lost after selection 【发布时间】:2021-06-30 19:34:49 【问题描述】:我有 Item (id, code, name & price), Warehouse(id & name) 和 Stock (item_id,warehouse_id, stock) 模型,其中 Stock 模型具有 item_id 和warehouse_id 关系键。我正在尝试使用 livewire mount 方法从库存模型中获取项目
public $items, $selected_id;
public function mount()
$this->items = Stock::select('item_id', 'warehouse_id')->groupBy('item_id', 'warehouse_id')->get();
我在 livewire 组件的选择输入中使用这些项目
<select wire:model='selected_id'>
@foreach($items as $item)
<option value='$item->item->id'>$item->item->code - $item->item->name </option>
@endforech
</select>
这在初始加载时工作得很好。但是当我从项目选择输入中选择一个项目时,所有项目都会丢失并在选项中获得空数组。
我不知道这段代码有什么问题。请帮我解决问题
【问题讨论】:
【参考方案1】:简答
您应该只对那些应该由前端修改的公共可访问属性使用。将$selected_id
保留为属性,但将$items
属性更改为您在render
方法中传递给视图的变量或计算属性。
public $selected_id;
public function getItemsProperty()
return Stock::select('item_id', 'warehouse_id')->groupBy('item_id', 'warehouse_id')->get();
public function render()
return view('some-view', [
'items' => $this->items,
])
说明
免责声明:我尚未使用调试器验证这一点,但这是我的最佳猜测。
Livewire 将公共属性序列化为可以发送到前端的格式。这就是为什么您仅限于原语(string
、int
、array
等)和某些类(Model
和 Collection
)。 Livewire 在后台将Collection
和Model
序列化为某种格式,以便它可以在下一次渲染中再次执行查询,从而防止后续请求中的Models
过时。
我认为这不能正常工作,因为您在查询 $items
属性时使用了 groupBy
。
【讨论】:
以上是关于Laravel Livewire - 选择后选择输入数据丢失的主要内容,如果未能解决你的问题,请参考以下文章
添加 select2 插件以选择选项后。 Laravel Livewire 搜索不起作用
Laravel Livewire:在选择输入的更改上传递选项值
Laravel Livewire 绑定模型 Carbon 属性
将参数(当前选择的 $this->user->id 而不是 auth()->user()->id)从视图传递到 livewire + laravel 中的 createShow