2013-09-21 257 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();