Дми*_*ков 6 laravel-livewire laravel-8
在mount()livewire 组件的功能中,我有一个集合,如下所示:
$this->products = $purchase->getProductsList();
Run Code Online (Sandbox Code Playgroud)
getProductsList()是购买模型的函数:
public function getProductsList() : Collection
{
$products = $this->purchaseSkus->pluck('sku.product')->unique();
return $products;
}
Run Code Online (Sandbox Code Playgroud)
每当渲染组件的刀片时 - 它工作正常
但在同一个刀片中,我有一个带有组件wire:model="description"功能的文本区域updatedDescription()。在文本区域进行更改后$products变成数组
我该如何预防?
PS:如果我投入$this->products使用render()- 它也可以正常工作。
Qir*_*rel 14
Laravel 中有两种不同的集合,一种是“默认”集合Illuminate\Support\Collection,另一种是 Eloquent 集合,Illuminate\Database\Eloquent\Collection. 您应该使用第二个 - 因为 Livewire 会更好地知道如何使用它来序列化/反序列化模型的 Eloquent 集合。
pluck()返回一个实例Illuminate\Support\Collection- Livewire 会将其水合为数组。任何不是模型或 Eloquent Collection 的东西都将被合并为数组(除了不可迭代的对象,如字符串、整数、布尔值等)。
要解决此问题,您可以通过产品模型获取数据,如下所示。由于我还没有看到实际的关系,或者是什么$this->purchaseSkus,所以这有点伪代码,您应该将关系修复sku.purchase为实际的关系。这将获取与 中的数据有关系的所有产品$this->purchaseSkus。
public function getProductsList() : Illuminate\Database\Eloquent\Collection
{
return Product::whereHas('sku.purchase', function($query) {
return $query->whereIn('id', $this->purchaseSkus->puck('id'));
})
->distinct()
->get();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5387 次 |
| 最近记录: |