親の制約に基づいて行の ID を取得する必要があります。雄弁を使ってこれを行い、エレガントに保ちたいと思います。このプロセスの開始時に注意すべき点: 私は - country_code (2 桁の iso)、lang_code (言語の 2 桁の略語) が必要です - country_id、lang_id (主キー) を取得できるので - market_id (最後のクエリに必要)
必要なデータを次のように取得できます。変数の命名については申し訳ありません (クライアントは奇妙な名前を持っていました)。
// Only receive desired inputs
$input_get = Input::only('marketCode','langCode');
// Need the country based on the "marketCode"
$countryId = Country::where('code',$input_get['marketCode'])->pluck('id');
// Get the lang_id from "langCode"
$languageId = Language::where('lang_abbr',$input_get['langCode'])->pluck('lang_id');
// Get the market_id from country_id and lang_id
$marketId = Market::where('country_id', $countryId)
->where('lang_id',$languageId)->pluck('market_id');
// Get All Market Translations for this market
$marketTranslation = MarketTranslation::where('market_id',$marketId)->lists('ml_val','ml_key');
私は次のことを試しましたが、これは制約に基づいて国と言語を熱心にロードするだけです。Eager Loading は、market_id が既にわかっている場合にのみ役立つようです。
class Market extends Eloquent {
protected $primaryKey = 'market_id';
public function country() {
return $this->belongsTo('Country');
}
public function language(){
return $this->belongsTo('Language','lang_id');
}
}
$markets = Market::with(array(
'country' => function($query){
$query->where('code','EE');
},
'language'=> function($query){
$query->where('lang_abbr','et');
}
))->get();