2015-04-30 23 views
1
class Order extends Elequent{ 
     protected $table = 'order'; 
     const CREATED_AT = "createdAt"; 
     const UPDATED_AT = "updatedAt"; 

     protected $with = array('orderItem', 'address'); 
     public function orderItem(){ 
      return $this->hasMany("OrderItem","orderId"); 
     } 
     public function address(){ 
      return $this->hasOne("OrderAddress","orderId","id"); 
     } 
    } 

    //in controller 
    $order = Order::findOrFail($orderId); 
    echo $order; 

當連載的順序使用上述類JSON,我怎麼可以讓order_item到OrderItem的(我不是蛇的情況下更喜歡駱駝)重命名關係的名字時,雄辯

{ 
    "id": 1, 
    "userId": 1, 
    "createdAt": "2015-04-30 12:08:26", 
    "deletedAt": "0000-00-00 00:00:00", 
    "updatedAt": "2015-04-30 12:08:26", 
    "state": "activated", 
    "deliveryNote": null, 
    "order_item": [ 
    { 
     "id": 1, 
     "specialProductId": 29, 
     "volume": 750, 
     "quantity": 2, 
     "price": "543.38", 
     "orderId": 1, 
     "updatedAt": "2015-04-30 12:08:26", 
     "createdAt": "2015-04-30 12:08:26" 
    } 
    ], 
    "address": null 
} 

回答

2

自動抓取你可以複製/重命名對象屬性並取消舊對象屬性。

//in controller 

$order = Order::findOrFail($orderId); 

$order->orderItem = $order->order_item; 
unset($order->order_item); 

echo $order; 

爲了更好的使用情況,您可以把您的基本模型這種方法,

public function toArrayCamel() 
{ 
    $array = $this->toArray(); 

    foreach($array as $key => $value) 
    { 
     $return[camel_case($key)] = $value; 
    } 

    return $return; 
} 

,後來你的控制器上,

$order = Order::findOrFail($orderId); 

return Response::json($order->toArrayCamel()); 
+0

它是一個字段的相當不錯的方法,但我想解決方案可以應用到數組中的多個項目,我會檢查文檔,然後更新這個問題。 –

+0

@JeffChung看看更新!這應該沒問題! – Philip

+0

@Phlip謝謝你。這很好。事實上,我將寫一個函數來讓toArrayCamel反覆出現,以便字段內的關係也可以變成駱駝。 –

5

在你的模型中,$snakeAttributes屬性設置爲假。這將在生成數組時保持屬性不受snake_cased影響。

class Order extends Elequent { 

    public static $snakeAttributes = false; 

} 
+0

它就像一個魅力。謝謝。 –