如何在 livewire wire:model 中绑定模型关系值?
how to bind the model relation value in livewire wire:model?
有一个具有许多描述关系的产品模型。
descriptions 关系有两列,count,body。
我必须如何定义 wire:model
值才能在 Livewire 更新组件中显示选定的产品描述值?
我必须提到从关系中获取数据工作正常只是不能在 wire:model
属性的输入标签中显示数据!我认为问题出在 protected $rules
或 wire:model
value!
的关键定义上
更新 Class:
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
循环和字段数重复正确但没有显示数据!
有几件事我想提一下,首先是您的视图应该始终只有 一个 根 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>
最后,您需要在 class 上将描述声明为 public 属性,并将它们存储在那里。
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;
}
有一个具有许多描述关系的产品模型。
descriptions 关系有两列,count,body。
我必须如何定义 wire:model
值才能在 Livewire 更新组件中显示选定的产品描述值?
我必须提到从关系中获取数据工作正常只是不能在 wire:model
属性的输入标签中显示数据!我认为问题出在 protected $rules
或 wire:model
value!
更新 Class:
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
循环和字段数重复正确但没有显示数据!
有几件事我想提一下,首先是您的视图应该始终只有 一个 根 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>
最后,您需要在 class 上将描述声明为 public 属性,并将它们存储在那里。
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;
}