2013-09-21 2 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 (Order Table) например, когда я пытаюсь получить -> user_id или -> Order_ID будет то же самое, что не имеет смысла, потому что как дубликат ордера дублируется как идентификатор пользователя.LEFT JOIN вопросы

пользователь :: много заказов

Это происходит только на левой стороне присоединиться к/присоединиться, любая идея, как я могу это исправить?

+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

Я получаю как Call to undefined method Illuminate \ Database \ Eloquent \ Collection :: User() isit, потому что мне нужно использовать; что нибудь? – CodeGuru

+0

Извините, я немного исправил свой код. В основном вам нужно, чтобы «ownTo (« Пользователь ») был тем же именем, что и ваша« пользовательская »модель. – Laurence

+0

Эхо не работает, кто-то сказал мне, что я не могу использовать пользователя(), как это в отношениях, так или иначе, я сделал это в лезвии и он работал {{$ order-> user-> first_name}} СПАСИБО! – 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.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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^