Мне нужно получить идентификатор строки, основанный на ограничениях родителей. Я хотел бы сделать это с помощью красноречивого и сохранить его элегантно. Некоторые вещи, которые следует учитывать при запуске этого процесса: У меня есть - country_code (2 цифры iso), lang_code (2-разрядная аббревиатура для языка) Мне нужно - country_id, lang_id (первичные ключи) , так что я могу получить - market_id (необходимо для последнего запрос)Laravel 4 eloquent - Получение идентификатора себя, основанного на ограничениях родителей
Я могу получить данные, мне нужно с нижеследующим, извините за именование переменных (клиент имел странные имена):
// 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');
Я попытался следующий, но это только стремятся загружать страну и язык на основе ограничений. Желание Загрузка только кажется полезным, если 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();
Спасибо за ваш ответ. Я изучил этот вариант, но мне очень хотелось не выполнять ручные объединения или запросы. Я действительно хотел полагаться на отношения и ORM. Я опубликовал решение, которое я придумал. –