3个表Laravel之间的关系

时间:2019-05-27 19:54:34

标签: php mysql laravel oop

我正在尝试创建一个API资源,在这里我可以从三个表中查看响应构建。

  1. 商店
  2. 订单
  3. 购买

当前,我可以使用路线(API /商店/订单)去一家商店(有多家商店),并在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 个答案:

答案 0 :(得分:1)

请尝试直接使用模型,而不是使用DB:table进行查询:

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

似乎DB:table返回stdClass个对象,因此它缺少模型可能提供的所有虚拟属性。