2013-09-21 203 views
0
$orders = Order::where('status','=',2) 
      ->with(array(
       'orderItems' => function($query) { 
        $query->whereNull('status'); 
       } 
      ))->leftjoin('users', function($join) 
    { 
     $join->on('orders.user_id', '=', 'users.id'); 
    }) 
      ->get(); 

當我做了左連接,我可以檢索用戶的詳細信息,但該訂單號將成爲USER_ID(順序表) 例如,當我試圖讓 - > USER_ID或 - > ORDER_ID這將是相同的沒有意義,因爲如何可以重複一個訂單id像用戶ID。左連接問題

用戶::有許多訂單

這只是發生在左連接/加入,任何想法如何,我可以解決這一問題?

+0

你應該讓用戶和訂單「關係」 - 那麼你不需要在首位的加入。查看關於關係的L4文檔。 – Laurence

回答

3

你應該把它定義爲一種關係:

class User extends Eloquent { 

    public function comments() 
    { 
     return $this->hasMany('Order'); 
    } 
} 

class Order extends Eloquent { 

    public function comments() 
    { 
     return $this->belongsTo('User'); 
    } 
} 

然後做

$orders = Order::where('status','=',2)->with(array(
      'orderItems' => function($query) { 
       $query->whereNull('status'); 
      } 
     )); 
echo 'this order belongs to user_id: '.$orders->user()->id; 
+0

我得到像調用未定義的方法Illuminate \ Database \ Eloquent \ Collection :: User()isit,因爲我需要使用;什麼? – CodeGuru

+0

對不起 - 我稍微修復了我的代碼。基本上你需要「belongsTo('User')與你的」用戶「模型名字相同 – Laurence

+0

回聲不起作用,有人告訴我,我無法在關係中使用user()它的工作{{$訂單 - >用戶 - >名字}}感謝! – CodeGuru

1

對不起,我沒有爲註釋的代表。以前的代碼示例有錯誤的函數名稱(在兩種情況下都是註釋)?

class User extends Eloquent { 

    public function orders() 
    { 
     return $this->hasMany('Order'); 
    } 
} 

class Order extends Eloquent { 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 
} 
0

這是由於表合併在一起並作爲單個表返回的事實。例如,orders.idusers.id將與表格的值id衝突。

要修復它實際上很簡單:只需將->select('tablename.*')添加到該功能。當然,如果您需要更多線路,請務必指定它們。

你的情況:

$orders = Order::where('status','=',2) 
      ->with(array(
       'orderItems' => function($query){ 
        $query->whereNull('status'); 
       } 
      )) 
      ->leftjoin('users', function($join){ 
       $join->on('orders.user_id', '=', 'users.id'); 
      }) 
      ->select('orders.*') 
      ->get();