2017-01-09 7 views
2

У меня есть две модели. Статус и продажаДетали.Laravel Eloquent query using where

Status 
------ 
    id 
name 
slug 

Я не определил какие-либо отношения из статуса в ПродажаДетали.

SaleDetails 
----------- 
    id 
    id_statuses //connects it to the status table 
    id_products 
    price 
    qty 

в модели:

public function status(){ 
    return $this->belongsTo('App\Status', 'id_statuses', 'id'); 
} 

Так что я пытаюсь сделать здесь получить все заказы, статус которых соответствуют определенному слизняку. например dd($this->sale_details->where('status.slug', 'pending')

С того, что я использую это:

$orders = $this->sale_details->with('product', 'status')->today()->get();

я должен быть в состоянии фильтровать их на основе слизней состояния в веб-интерфейсе, но я хочу, чтобы просто сделать это прямо здесь.

Каков наилучший способ сделать это?

ответ

2

Вы должны использовать whereHas(), что позволяет уточнить дополнительные фильтры для соответствующей модели.

Чтобы применить условие, при котором вы можете использовать whereHas() как,

$status = "pending"; 

$this->sale_details->whereHas('status', function($q) use ($status){ 
    $q->where('slug', $status); 
})->get(); 
+0

отлично работает спасибо! Что делает замыкание в этом случае? какую часть документов я могу прочитать, чтобы узнать больше об этом? –

+2

Вы можете просто прочитать этот документ. https://laravel.com/docs/5.3/eloquent-relationships#introduction. –

-2

я думаю, лучше, чем при использовании строителя запросов если вы хотите быстро proccess