"Attempt to read property \"id\" 在字符串上" laravel api

"Attempt to read property \"id\" on string" laravel api

ProductController.php

class ProductController extends Controller
{
    public function index(Request $request)
    {
        $limit = $request->has('limit') ? $request->get('limit') : 10;
        $offset = $request->has('offset') ? $request->get('offset') : 0;

        $products = Product::offset($offset)->limit($limit)->get();
        return new ProductResource($products);
    }
    //Search Products
    public function search($name, Request $request)
    {
        $limit = $request->has('limit') ? $request->get('limit') : 10;
        $offset = $request->has('offset') ? $request->get('offset') : 0;

        $products = Product::where('name', 'like', '%' . $name . '%')
            ->offset($offset)->limit($limit)->get();
        return new ProductResource($products);
    }

}

ProductResource.php

class ProductResource extends JsonResource
{
 
    public function toArray($request)
    {

        foreach ($request->all() as $product) {
            $response = [
                'id' => "p" . $product->id,
                'name' => $product->name,
                'slug' => $product->slug,
                'regular_price' => $product->regular_price,
                'sale_price' => $product->sale_price,
                'SKU' => $product->SKU,
                'stock_status' => $product->stock_status,
                'quantity' => "p" . "$product->quantity",
                'image' => $product->url,
                'images' => $product->url,
                'category_id' => $product->category_id,

            ];
            $responses[] = $response;

        }
        return response($responses, 201);

    }
}

这是我从 api (http://127.0.0.1:8000/api/products?limit=5&offset=0) 获取的路线 发送时, "message": "尝试读取字符串中的 属性 "id"", "文件": "/Applications/XAMPP/xamppfiles/htdocs/DNI_E_commerce/app/Http/Resources/ProductResource.php", “行”:20,

在您的搜索功能中,您可以只 return 从 ->get() 查询中获得的 $products。 $products 是数据库中与搜索查询匹配的所有产品的 laravel 集合。集合基本上是一个奇特的对象。 https://laravel.com/docs/8.x/eloquent-collections

如果这样做,您应该能够按原样使用 toArray() 函数,但您也可以只循环遍历集合而不先将其放入数组。