У меня есть следующие модели:
Страна, СтранаTranslation, Город, CityTranslation
Я хочу добиться, чтобы получить список всех городов в какой-либо стране, но они должны быть отсортированы по их названию. Проблема в том, что названия этих городов есть в CityTranslation.
Вот определения модели:
Страна:
class Country extends Model {
protected $fillable = [
'code', 'latitude', 'longitude', 'currency_id', 'timezone', 'dam_date', 'status',
];
public function translations() {
return $this->hasMany('App\Models\CountryTranslation');
}
public function city() {
return $this->hasMany('App\Models\City');
}
}
Город:
class City extends Model {
protected $fillable = [
'name', 'latitude', 'longitude', 'code', 'country_id', 'status',
];
public function translations() {
return $this->hasMany('App\Models\CityTranslation');
}public function country() {
return $this->hasMany('App\Models\Country');
}
}
CityTranslation:
class CityTranslation extends Model {
protected $fillable = [
'name', 'lang', 'city_id',
];
public function city() {
return $this->hasOne('App\Models\City', 'id', 'city_id');
}
}
На данный момент я получаю эти города следующим образом, но они не упорядочены:
$country = $this->country->findOrFail($id);
foreach (City::where('country_id', '=', $id)->get() as $cur) {
$city_trans = CityTranslation::where(array(['city_id', '=', $cur->id], ['lang', '=', Lang::getLocale()]))->orderBy('name', 'asc')->first();
$cities_by_country[$cur->id] = $city_trans->name;
}
В вашем Country
модель вы можете использовать что-то вроде этого:
public function city()
{
return $this->hasMany('App\Models\City')->orderBy('name');
}
Затем, когда вы запрашиваете Country
использование with
например:
$countryWithCity = Country::with('city')->findOrFail($id);
Итак $countryWithCity->city
будет заказан.
Других решений пока нет …