2016-02-12 4 views
1

Сценарий - У меня 3 стола> Страна, штат, город. У города есть колонка с идентификатором, у государства есть столбец countryid, страна не имеет ссылки.Laravel 5 - красноречивая модель - 3 таблицы в серии

метода Город Модель

метода
public function state(){ 
    return $this->belongsTo('App\State', 'stateid'); 
} 

Государственная модель

public function country(){ 
    return $this->belongsTo('App\Country', 'countryid'); 
} 
public function cities(){ 
    return $this->hasMany('App\City', 'stateid'); 
} 

Страна Модель метода

public function states() 
{ 
    return $this->hasMany('App\State', 'countryid'); 
} 

Проблема - Я хочу, чтобы получить список городов в стране. Как создать метод в Country Model, как это? -

public function cities(){ 
    return $this->states()->cities(); //Calling hasMany on builder is not possible. 
} 

Аналогичным образом, метод названия страны из городской модели.

+1

Что вы ищете for is, 'hasManyThrough()'. См. Https://laravel.com/docs/5.1/eloquent-relationships#has-many-through – Mysteryos

+0

@Mysteryos - Спасибо, это сработало. – asachanfbd

+0

@Mysteryos - есть ли способ получить страну из города? – asachanfbd

ответ

0

Чтобы получить коллекцию со всеми городами в стране, используйте метод hasManyThrough:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Country extends Model 
{ 
    public $timestamps = false; 

    public function states() 
    { 
     return $this->hasMany(State::class); 
    } 

    public function cities() 
    { 
     return $this->hasManyThrough(City::class, State::class); 
    } 
} 
0

Страна Модель:

<?php 

    namespace App; 
    use Illuminate\Database\Eloquent\Model; 

    class Country_master extends Model 
    {  

     public function city_state_data() 
     { 
      return $this->belongsToMany('App\State_master','city_masters'); 
     } 
    } 

Вызов Модель:

<?php 
    $data=Country_master::find(1)->city_state_data()->select('city_name','state_name')->get(); 
Смежные вопросы