Связь между 3 таблицами Laravel

Я пытаюсь создать ресурс API, где я могу просмотреть сборку ответов из трех таблиц.

  1. Магазин
  2. Заказы
  3. Покупки

В настоящее время я могу зайти в магазин (есть несколько магазинов), используя маршруты (api/store/orders) и просмотреть заказы в ответе JSON.

отклик

{
 data: [
  {
   id: 1,
   code: "1f",
   status: "waiting",
   user_name: "Salman",
   created_at: "",
   updated_at: ""
  },
  {
   id: 2,
   code: "2f",
   status: "waiting",
   user_name: "Jerome",
   created_at: "",
   updated_at: ""
  }
 ]
}

Однако, когда я пытаюсь добавить свои покупки в ответ с помощью:

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Orderresource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'code' => $this->code,
            'status' => $this->status,
            'user_name' => $this->user_name,
            // Added purchases
            'order' => $this->purchases,
            'created_at' => (string) $this->created_at,
            'updated_at' => (string) $this->updated_at,
        ];
    }
}

Я получаю ответ об ошибке Undefined property: stdClass::$purchases

Теперь я добавил покупки в свою модель заказа с помощью:

  public function purchases()
  {
    return $this->hasMany(Purchase::class);
  }

Однако я знаю, что заказ может лежать на моем show_order_per_store.

функция в моем OrderController

    public function show_order_per_club($id)
    {
      $order = DB::table('orders')->where('store_id', '=', $id)->get();


      return  Orderresource::collection($order);
    }

Теперь эта функция получает все заказы из похожих магазинов, но как мне добавить покупки в ответ API магазинов?

Короче говоря, я пытаюсь получить ответ API для каждого магазина с заказами, которые у него есть, и покупки принадлежат этому заказу.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо использования DB:table для запроса попробуйте использовать модель напрямую:

Order::where('store_id', '=', $id)->get();

Кажется, что DB:table возвращает stdClass объектов, поэтому ему не хватает всех виртуальных атрибутов, которые может предоставить модель.

спасибо, постараюсь проверить, может ли этот метод работать. Не могли бы вы объяснить мне немного больше, что делает ::where?

Salman 27.05.2019 23:35

@Salman Это стандартное предложение SQL where. Он делает то же самое, что и DB::table()->where(), только в запросе автоматически устанавливается соответствующее имя таблицы.

levi 27.05.2019 23:45

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