gpt4 book ai didi

laravel-8 - Livewire 将集合转化为数组

转载 作者:行者123 更新时间:2023-12-05 01:28:31 31 4
gpt4 key购买 nike

在 livewire 组件的 mount() 函数中我有一个集合,看起来像这样:

$this->products = $purchase->getProductsList();

getProductsList() 是 Purchase 模型的函数:

public function getProductsList() : Collection
{
$products = $this->purchaseSkus->pluck('sku.product')->unique();
return $products;
}

每当渲染组件的 Blade 时 - 它工作正常

enter image description here

但在同一个 Blade 中,我有一个带有 wire:model="description" 和组件中的函数 updatedDescription() 的文本区域。在文本区域中进行更改后 $products 变成数组

enter image description here

我该如何预防?

P.S.:如果我将 $this->products 放入 render() 函数中 - 它也可以正常工作。

最佳答案

Laravel 中有两个不同的集合,“默认”一个 Illuminate\Support\Collection - 另一个用于 Eloquent 集合,Illuminate\Database\Eloquent\Collection。您应该使用第二个 - 因为 Livewire 会更好地知道如何使用它序列化/反序列化 Eloquent 模型集合。

pluck() 返回 Illuminate\Support\Collection 的实例 - Livewire 会将其合并为一个数组。任何不是 Model 或 Eloquent Collection 的东西,都将被合并为一个数组(除了不可迭代的对象,如字符串、整数、 bool 值等)。

要解决此问题,您可以通过 Product 模型获取数据,如下所示。由于我没有看到实际关系,也没有看到 $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();
}

关于laravel-8 - Livewire 将集合转化为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68466137/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com