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 一样重复。

用户 :: 有很多订单

这只发生在左加入/加入,知道如何解决这个问题吗?

4

3 回答 3

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;
于 2013-09-21T07:47:22.227 回答
1

抱歉,我没有代表发表评论。以前的代码示例有错误的函数名称(在这两种情况下都说注释)?

class User extends Eloquent {

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

class Order extends Eloquent {

    public function user()
    {
        return $this->belongsTo('User');
    }
}
于 2013-09-22T09:54:23.900 回答
0

这是因为表合并在一起并作为单个表返回。例如,orders.id和表users.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();
于 2013-11-21T11:15:30.247 回答