$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 ::有很多订单
这只发生在左连接/加入,任何想法如何解决这个问题?
答案 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.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();