0
我有兩種模式,啤酒和發行版,它們有多對多的關係。包含啤酒的一些相關信息(例如價格和狀態)的桶模型hasMany
桶。當我建立我的啤酒指數時,我需要啤酒模型,分銷商模型和桶模型的所有信息。我試圖弄清楚的是如何以有效的方式查詢所有信息。這裏是我當前的查詢:查詢'跨'數據透視表
小桶的是在狀態作用域:
public function scopeStatus($query, $status)
{
return $query->where('status', '=', $status);
}
,我建我的啤酒指數有:
$kegs = Keg::status($status)->get();
$beers=[];
foreach ($kegs as $keg){
$beer = Beer::find($keg->beer_distribution->beer_id);
$distributor = Distributor::find($keg->beer_distribution->distributor_id);
$beers[]=[
'beer' => $beer,
'keg' => $keg,
'distributor' => $distributor];
}
return $beers;
我知道,這是一個緩慢的查詢,但林不知道如何在單個查詢中執行此操作。有什麼方法可以更快地運行?
一些相關型號代碼:
class Beer extends Eloquent {
public function distributors()
{
return $this->belongsToMany('Distributor', 'beer_distributions');
}
class BeerDistribution extends Eloquent {
protected $fillable = ['beer_id', 'distributor_id'];
public function kegs()
{
return $this->hasMany('Keg', 'beer_distribution_id');
}
class Distributor extends Eloquent {
public function beers()
{
return $this->belongsToMany('Beer', 'beer_distributions');
}
class Keg extends Eloquent {
public function scopeStatus($query, $status)
{
return $query->where('status', '=', $status);
}
public function beerDistribution()
{
return $this->belongsTo('BeerDistribution');
}
}
你見過[HasManyThrough](http://laravel.com/docs/5.0/eloquent#has-many-through)嗎? – Ravan 2015-03-31 03:50:34
如果我爲與啤酒連接的每個分銷商設置了多個酒桶,這種方式會起作用嗎? – hodale 2015-03-31 03:55:38