2016-07-15 25 views
1

私はDBにテーブルをいくつも持っており、リレーションを持っています。ルーメンはモデルコレクションからシリアル化された構造を構築する方法?

[ 
    { 
    "id": 1, 
    "status": "created", 
    "user": {"id":1, "name":"Max"}, 
    "items":[{"id":1, "name":"Banana", "count": 2}, {...item two}] 
    }, 
    { 
    .. order two 
    } 
] 

いくつかのフィールドが非表示になります(のcreated_at、など)、およびその関係で選択されたすべてのモデル: - 注文を

user table 
- id 
- name 
- email 
- created_at 

orders table 
- id 
- user_id 
- status 
- created_at 

order_items table 
- id 
- order_id 
- item_id 
- count 

items table 
- id 
- article 
- name 
- ... 

そして最後に、私はこのビューにデータを変換する必要があります。たとえば。

だから、私は

$userOrders = Orders::where([ 
    'user_id' => $request->user()->id 
]) 
    ->select(['id']) 
    ->with('orders.items') // <<<< oops nested relations 
    ->get(); 

しかし、問題のような何かを行うことができます:

  1. ネストされた関係に理想的モデルに基づいて、ネストされた関係(からのみ必要なフィールドを残す方法
  2. を選択する方法フィールドリストがシナリオに依存するシナリオ)

答えて

0

あなたは何でも選んでください...

$userOrders = Orders::with('orders.items')->where('user_id', $request->user()->id)->get(); 

そして、個々のモデルには隠したいものが設定されます。

たとえば、ユーザーの属性でcreated_at列を非表示にしたいとします。プロパティを追加...

protected $hidden = ['created_at', 'updated_at']; // + any other fields you want to hide on the user model. 
+0

個別の隠しルールを設定することは可能ですか?私は、/ v1/ordersの注文を選択するとき、私は、私は私が私はすべてのモデルの属性を返すように/ v1/orderInfoときに私はcreated_ attrをせずにリターンモデルをしたい説明してみましょう.. – sharp

関連する問題