左加入问题

时间:2013-09-21 07:01:57

标签: php laravel-4 query-builder

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

user ::有很多订单

这只发生在左连接/加入,任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

class User extends Eloquent {

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

class Order extends Eloquent {

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

答案 2 :(得分: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();