Соотношение между 3 таблицами Laravel - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь создать ресурс 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 для каждого магазина с заказами, которые он имеет, и покупки принадлежат этому заказу.

1 Ответ

1 голос
/ 27 мая 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...