2014-03-18 4 views
1

Есть ли способ сделать это с красноречивым?Laravel 4 eloquent

$orders = Customer::with('orders','orders.shop')->where('orders.shop.location','=','Japan')->get() 

Клиенты, заказы и магазин - это таблицы, в которых 1 клиент имеет много заказов, и каждый заказ имеет только один магазин.

Расположение столбец в таблице магазина

Я получаю ошибку о том, orders.shop.location столбец не найден.

Любой может помочь? Заранее спасибо.

+0

Установили ли вы отношения в вашей модели? – Needpoule

ответ

2

Вам необходимо определить отношения в классах моделей.

модель Заказчик:

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

Модель заказа:

public function customer() 
{ 
    return $this->belongsTo('Customer'); 
} 

Тогда, если вы хотите заказы специального клиента вы просто должны сделать:

$orders = Customer::find($id)->orders; 

Или найти пользователя приложен к заказу:

$user = Order::find($id)->user; 

Вы также можете использовать один и тот же вид связи между вашим магазином и моделью заказа и сделать что-то вроде этого:

$orders = Order::with(array('shop' => function($query) 
{ 
    $query->where('location', '=', 'japan'); 

}))->get(); 

Который должен дать вам все заказы для магазина, расположенного в Японии.

Больше информации о данном типе запроса: http://laravel.com/docs/eloquent#eager-loading

1

в CostumerModel вам нужно установить отношения (один ко многим):

public function order() 
{ 
    return $this->hasMany('OrderModel', 'foreign_key_in_orderTable'); 
} 

в OrderModel тоже:

public function costumer() 
{ 
    return $this->belongsTo('CostumerModel', 'foreign_key_in_orderTable'); 
} 

затем в OrderModel еще одно отношение к Магазину (один к одному):

public function shop() 
{ 
    return $this->hasOne('ShopModel', 'foreign_key'); 
} 

Сейчас в ShopModel (один к одному):

public function order() 
{ 
    return $this->belongsTo('OrderModel', 'local_key'); 
} 

запрос:

$orders = Customer::with('costumer', 'shop')->where('location','=','Japan')->get();