我有3个型号:
市:
protected $fillable = [
'name', 'latitude', 'longitude', 'code', 'country_id', 'status', 'weather_code',
];
public function translations() {
return $this->hasMany('App\Models\CityTranslation');
}
public function country() {
return $this->hasMany('App\Models\Country');
}
城市翻译
protected $fillable = [
'name', 'lang', 'city_id',
];
public function city() {
return $this->hasOne('App\Models\City', 'id', 'city_id');
}
和国家
protected $fillable = [
'code', 'latitude', 'longitude', 'currency_id', 'timezone', 'dam_date', 'status',
];
public function city() {
return $this->hasMany('App\Models\City');
}
我的问题是,当我浏览CityTranslations并显示所选语言的城市名称时,我还想显示有关城市及其国家的信息。
调用$ cityTranslation-> city->经度是没有问题的,但是当我调用$ cityTranslation-> city-> country-> code时,它给了我一个MySQL错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'countries.city_id' in 'where clause' (SQL: select * from `countries` where `countries`.`city_id` = 4439 and `countries`.`city_id` is not null)
如何建立递归关系?
最佳答案
尝试
$cityTranslation = \App\CityTranslation::with('city.country')->get();
那就是如果您想获得所有城市翻译以及与城市和国家相关的信息。您可以遍历并获取国家/地区代码。
如果您只选择一种城市翻译及其相关项目,则可以
$cityTranslation = \App\CityTranslation::with('city.country')->find($id);
更改此设置(在您的城市模型中)
public function country() {
return $this->hasMany('App\Models\Country');
}
至
public function country() {
return $this->belongsTo('App\Models\Country');
}
因为一个国家可以有许多城市,每个城市都必须属于一个国家