Как получить все строки с общим значением

Я пытался получить все строки с одинаковым значением в моей БД, я пытаюсь получить его с помощью контроллера laravel, у меня есть таблица с именем столбца uuid, который имеет uuid пользователей, может быть несколько строк с тот же uuid, я хочу получить все данные строк с одним и тем же uuid, в настоящее время я получаю только данные первой строки.

вот моя функция контроллера:

public function show($id)
    {
        $cartProduct = add_product_cart::where('uuid', $id)->first();
        if (!$cartProduct) {
            return new ErrorResource('Data not found');
        }
        return new InvestmentResource($cartProduct);
    }

Я использую API следующим образом:

http://localhost:8000/api/investment/1234

//1234 is the uuid

//I get the payload like this:

 "data": {
        "id": 1,
        "uuid": "1234",
        "email": "[email protected]",
        "product_name": "test product",
        "product_price": "5000",
    },
    "status": true
}

Я могу получить первую строку с помощью функции first(), но когда я использую get(), я получаю эту ошибку:

Property [id] does not exist on this collection instance.

В api.php у меня есть:

Route::get('investment/{id}', 'InvestmentController@show');

Файл InvestmentResource.php

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class InvestmentResource extends JsonResource
{
    public function __construct($resource)
    {
        parent::__construct($resource);
        $this->resource = $resource;
    }

    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'uuid' => $this->uuid,
            'email' => $this->email,
            'product_name' => $this->product_name,
            'product_price' => $this->product_price,
        ];
    }

    public function with($request) {
        return [
            'status'=> true,
        ];
    }
}

Что такое InvestmentResource?

Peppermintology 24.12.2020 12:45

Файл ресурсов JSON для отправки массива

rv_100 24.12.2020 12:53

Я подозреваю, что ваша ошибка в InvestmentResource. ->get() вернет коллекцию, но, возможно, ваш InvestmentResource ждет один Item? Публикация кода того, как работает ваш InvestmentResource, может прояснить это.

Peppermintology 24.12.2020 13:01

Я добавил свой файл ресурсов в свой вопрос.

rv_100 24.12.2020 13:14

Для этого требуется один ресурс, вы хотите использовать коллекцию ресурсов для преобразования ваших данных.

Peppermintology 24.12.2020 13:20
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
5
142
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

используйте get() вместо first().

Так:

$cartProduct = add_product_cart::where('uuid', $id)->get();

Также измените следующее, чтобы избежать ошибки, поскольку вы не можете использовать оператор ! для проверки коллекции массивов:

if (count($cartProduct) == 0) {
        return new ErrorResource('Data not found');
    }

получаю эту ошибку Exception: Property [id] does not exist on this collection instance. in file E:\Xampp\htdocs\logicfinance\vendor\laravel\framework\src\Il‌​luminate\Support\Tra‌​its\EnumeratesValues‌​.php on line 860

rv_100 24.12.2020 12:25

Можете ли вы отредактировать вопрос и добавить код файла, в котором вы передаете/обрабатываете данные?

Rian Zaman 24.12.2020 12:28

У меня есть только контроллер, который использует только метод show(), который я добавил в свой вопрос, и есть файл ресурсов InvestmentResource, который дает полезную нагрузку, как я добавил в вопросе. я вызываю метод с помощью этого API Route::get('investment/{id}', 'InvestmentController@show');, он дает полезную нагрузку, как и ожидалось, с методом first(), но не возвращает то же самое с get(), выдавая вышеуказанную ошибку.

rv_100 24.12.2020 12:39
Ответ принят как подходящий

Property [id] does not exist on this collection instance. Ошибка связана с тем, что метод get() возвращает в ответ массив (коллекцию с индексами). Таким образом, чтобы получить доступ к id сейчас, вам нужно будет использовать $cartProduct[0]->id цикла для $cartProduct, чтобы получить все ids

Обновлять Вы можете заменить свою функцию следующей.

public function show($id)
    {
        $cartProduct = add_product_cart::where('uuid', $id)->get();
        if (!$cartProduct) {
            return new ErrorResource('Data not found');
        }
        return InvestmentResource::collection($cartProduct);
    }

Используйте метод сбора, если в вашей коллекции (данных) существует несколько записей.

можете поделиться фрагментом?

rv_100 24.12.2020 12:56

Нужно сначала подтвердить, нужна ли вам одна запись или несколько записей?

yasir gakhar 24.12.2020 13:57

несколько записей с одинаковым UUID

rv_100 28.12.2020 08:38

Отличный ответ, это помогло, большое спасибо @yasir gakhar

rv_100 28.12.2020 09:06

Другие вопросы по теме