我有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');

}


因为一个国家可以有许多城市,每个城市都必须属于一个国家

10-07 23:28