Как использовать соединение, используя отношение «один ко многим» в Laravel Eloquent? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть две таблицы country и state.Таблица стран имеет столбцы country_id и country_name.Таблица состояний содержит столбцы state_id, state_name и country_id.

Я хочу отобразить state_id, state_name и country_name в выходных данных.

Country модель:

class Country extends Model
{
    protected $table = 'country';
    protected $fillable = ['country_name'];
    public $timestamps = false;
    protected $primaryKey = 'country_id';

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

State модель:

class State extends Model
{
    protected $table = 'state';
    protected $fillable = ['state_name','country_id'];
    public $timestamps = false;
    protected $primaryKey = 'state_id';

    public function country()
    {
        return $this->belongsTo(Country::class);
    }
}

My StateController:

$country_state_data = State::with('country_name')->get();

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы уже почти там.Что вы хотите сделать, это использовать State::get(), чтобы получить список всех состояний.Затем вы добавляете with('country') перед get(), чтобы он был добавлен в построитель запросов.Как видите, country - это имя отношения, которое вы хотите загрузить.После этого вы можете получить доступ ко всем свойствам country так же, как вы можете получить доступ к свойствам вашего state:

$states = State::with('country')->get();
foreach ($states as $state) {
    echo "ID: {$state->id}, State: {$state->name}, Country: {$state->country->name}";
}

выведет что-то вроде

ID: 1, State: Vorarlberg, Country: Austria
ID: 2, State: Bavaria, Country: Germany

После некоторого исследования кажется, что при изменении первичного ключа имеет смысл добавить ключи к определению отношения:

public function country()
{
    return $this->belongsTo(Country::class, 'country_id', 'country_id');
}

В противном случае отношение загружается неправильно.

0 голосов
/ 08 июня 2018

используйте

$country_state_data = state::with('country')->get();

и по вашему мнению

@foreach($country_state_data as $state)
    {{ $state->country->country_name }}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...