2017-05-18 75 views
0

我在項目中使用了CakePHP 3,並且我正在做api休息以獲取JSON以獲取移動設備中的數據。 我有兩個表與外鍵這樣的關聯:如何選擇包含關聯的字段作爲主要實體的字段?

MySql tables 
    ---------------------- 
    Table Tickets: 
    |id|code|price_id| 

    Table Prices 
    |id|price| 

    ---------------------- 

在TicketsTable CakePHP中:

$this->belongsTo('Prices', [ 
     'foreignKey' => 'price_id', 
     'joinType' => 'INNER' 
    ]); 

在控制器,當我做REST API:

$this->loadModel('Tickets'); 
     $entradas = $this-> Tickets->find('all') 
      ->contain('Prices') 
      ->select(['Tickets.code','Prices.price']) 
      ->limit('200') 
      ->toArray(); 

,那麼這個數組,解析爲JSON返回:

"result":{ 
     "tickets":[ 
     { 
      "code":"08998112773", 
      "prices":{ 
       "prices.price":1 
      } 
     }, 
     { 
      "code":"07615265880", 
      "prices.prices":{ ......... 

而且我想返回該JSON:

"result":{ 
      "tickets":[ 
      { 
       "code":"08998112773", 
       "price":1 
      }, 
      { 
       "code":"07615265880", 
       "price":1 ......... 

也就是說,價格不插入一個新的數組,該表的名字沒有出現在字段名。

非常感謝!!!!

回答

1

你可以使用使用Cake\Collection\Collection::map()創建一個新的數組:

$tickets = [ 
    'result' => [ 
     'tickets' => [ 
      [ 
       'code' => '123', 
       'prices' => [ 
        'prices.price' => '2' 
       ] 
      ], 
      [ 
       'code' => '312423', 
       'prices' => [ 
        'prices.price' => '4' 
       ] 
      ] 
     ] 
    ] 
]; 

$collection = new Collection($tickets['result']['tickets']); 

$new = $collection->map(function ($value, $key) { 
    return [ 
     'code' => $value['code'], 
     'price' => $value['prices']['prices.price'] 
    ]; 
}); 

$result = $new->toArray(); 

debug(json_encode(['result' => ['tickets' => $new]], JSON_PRETTY_PRINT)); 
die; 

輸出是:

{ 
    "result": { 
     "tickets": [ 
      { 
       "code": "123", 
       "price": "2" 
      }, 
      { 
       "code": "312423", 
       "price": "4" 
      } 
     ] 
    } 
} 
相關問題