有一个产品模型有很多描述关系。
描述关系有两列,计数,正文。
我必须如何定义 wire:model
值才能在 Livewire Update 组件中显示选定的产品描述值?
我必须提到从关系中获取数据工作正常,只是无法在 wire:model
属性的输入标记中显示数据!我认为问题在于受保护的 $rules
或 wire:model
值的键定义!
更新类:
public $product;
protected $listeners = ['selectedProduct'];
public function selectedProduct($id){
$this->product = Product::with('descriptions')->findOrFail($id);
}
protected $rules = [
"description.count" => "required",
"description.body" => "required",
];
livewire 视图:
@if($product)
@foreach($product->descriptions as $description)
<input type="text" wire:model="description.count">
<texatarea wire:model="description.body"></texatarea>
@endforeach
@endif
循环和字段数重复正确但没有显示数据!
答案 0 :(得分:1)
有几件事我想提一下,首先是您的视图应该始终只有一个根 HTML 元素 - 在循环中生成的后续元素也应该有一个唯一的里面有 wire:key
的根元素。 wire:key
在您的网页上应该是独一无二的。
然后我们需要查看规则 - 任何模型都需要规则才能在输入元素中可见是正确的,但是您有一个元素集合,因此规则需要反映这一点。为此,您指定一个通配符作为键
protected $rules = [
"description.*.count" => "required",
"description.*.body" => "required",
];
然后这些字段必须绑定到一个索引,所以 Livewire 知道它在一个集合中。
<div>
@if ($product)
@foreach($product->descriptions as $index=>$description)
<div wire:key="product-description-{{ $description->id }}">
<input type="text" wire:model="descriptions.{{ $index }}.count">
<texatarea wire:model="descriptions.{{ $index }}.body"></texatarea>
</div>
@endforeach
@endif
</div>
最后,您需要将描述声明为类的公共属性,并将它们存储在那里。
public $product;
public $descriptions;
protected $listeners = ['selectedProduct'];
protected $rules = [
"description.*.count" => "required",
"description.*.body" => "required",
];
public function selectedProduct($id){
$this->product = Product::with('descriptions')->findOrFail($id);
$this->descriptions = $this->product->descriptions;
}