如何使用Laravel Eloquent获取相关城市的国家名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Laravel Eloquent获取相关城市的国家名称相关的知识,希望对你有一定的参考价值。
我在我的项目中需要帮助,我有一个城市组件,通过id如何在城市表和国家表之间建立关系,如何获取城市组件中每个城市的国家名称
这是我在城市组件中的代码
<table id="example" class="display" style="width:100%">
<thead>
<tr>
<th>
<label class="form-checkbox">
<input type="checkbox" v-model="selectAll" @click="select">
<i class="form-icon"></i>
</label>
</th>
<th>#</th>
<th>City Name</th>
<th>Country Name</th>
<th>Created At</th>
<th>Updated At</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
<tr v-if="cities.length > 0" v-for="(city,index) in cities" :id="city.id">
<td>
<label class="form-checkbox">
<input type="checkbox" :value="city.id" v-model="selected">
<i class="form-icon"></i>
</label>
</td>
<td>index+1 </td>
<td>city.name</td>
<td></td>
<td>city.created_at</td>
<td>city.updated_at</td>
<td><button class="btn btn-warning" @click="editModal=true;setVal(city.id,city.name,city.country)" data-toggle="modal" data-target="#editcity"><i class="fa fa-pen"></i></button></td>
<td><button class="btn btn-danger" @click="delcity(city.id)"><i class="fa fa-trash"></i></button></td>
</tr>
</tbody>
<tfoot>
<tr>
<th><label class="form-checkbox">
<input type="checkbox" v-model="selectAll" @click="select">
<i class="form-icon"></i>
</label></th>
<th>#</th>
<th>City Name</th>
<th>Country Name</th>
<th>Created At</th>
<th>Updated At</th>
<th>Edit</th>
<th>Delete</th>
</tr>
</tfoot>
</table>
城市部分代码的第二部分
<script>
export default
data()
return
cities: [],
countries: [],
id: '',
name: '',
country_id: '',
country_name: '',
loading: false,
showModal: false,
editModal: false,
selected: [],
selectAll: false,
csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content')
,
methods:
getCities()
let url = '/dashboard/getCities';
axios.get(url).then(res=>
let link = this;
this.cities = res.data;
/*this.cities.forEach(function(item)
link.getCountryName(item.country_id);
);*/
)
,
getCountryName(id)
axios.get('/dashboard/getCountryName/'+id).then(res=>
console.log(res.data.success);
this.country_name = res.data.success;
);
,
getCountries()
axios.get('/dashboard/getCountries').then(res=>
this.countries = res.data;
)
,
,
mounted()
this.getCities();
this.getCountries();
这两个函数获取城市并在城市控制器中获取国家/地区名称
public function getCities()
$cities = City::orderBy('id','desc')->get();
return response()->json($cities);
public function getCountryName($country_id)
$country = DB::table('countries')->where('id','=',$country_id)->first();
return response()->json(['success'=> $country->name],200);
国家模型中的关系代码
public function cities()
return $this->hasMany('App\Models\City');
城市模型中的关系代码
public function countries()
return $this->hasMany('App\Models\City');
Country
模型的序列化中包含City
模型的字段相对来说并不容易。您的关系应如下所示:
City.php
<?php
...
class City extends Model
...
public function Country
return $this->belongsTo('App\Models\Country');
Country.php
<?php
...
class Country extends Model
...
public function Cities
return $this->hasMany('App\Models\City');
此设置需要NOTE:
country_id
表上的cities
列您目前已将此关系定义为many-to-many,考虑到上下文,这没有多大意义。 City
没有很多国家。 <<< [belongsTo确切地为[[one国家。另一面很好,因为Country
does有许多城市。因此,您想要的是one-to-many关系。一旦正确设置了模型关系,就可以轻松获取任何Country
的City
名称。我会这样:
<?php
...
class City extends Model
...
protected $with = ['country'];
这意味着,每当从数据库中加载City
时,其相关的Country
就是eager loaded。
或者,当您加载所有城市时,您可以渴望加载相关的Country
:
citycontroller
public function getCities()
$cities = City::with('country')
->orderBy('id','desc')
->get();
return response()->json($cities);
无论选择哪种实现,您的城市组件都可以通过Country
模型访问City
的字段:
<tr v-if="cities.length > 0" v-for="(city,index) in cities" :id="city.id">
...
<td> city.country.name </td>
...
</tr>
public function country()
// return $this->belongsTo('App\Models\Country');
return $this->belongsTo(Country::class);
通过将countries
重命名为country
的方式
以上是关于如何使用Laravel Eloquent获取相关城市的国家名称的主要内容,如果未能解决你的问题,请参考以下文章