Laravel 5.3 Тесные отношения

я использую Laravel 5.3

и я пытаюсь выбрать из базы данных значения для lang-файлов,

я создал файл и назвал его global.php

и внутри файла я попытался сделать это:

use App\Dictionary; $language_id = 1; $dictionary = array(); $lables = Dictionary::where('language_id',$language_id)->get(); foreach($lables as $label): $dictionary[$label->label] = $label->value; endforeach; return $dictionary; 

теперь это работает, но я хочу выбрать строки, используя поле short_name, а не идентификатор языка

я хочу, чтобы это было что-то вроде этого:

 $lables = Dictionary::all()->language()->where('short_name', 'en')->get(); 

моя база данных выглядит так:

Языки

 id name // for example: English short_name // for exmaple: en 

Словарь

 id key value language_id 

и мои модели выглядят так:

Языковая модель

 namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Language extends Model { use SoftDeletes; protected $softDelete = true; protected $dates = ['deleted_at']; public function dictionary() { return $this->hasMany('App\Dictionary'); } } 

Модель словаря

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Dictionary extends Model { protected $table = 'dictionary'; public function language() { return $this->belongsTo('App\Language'); } } 

спасибо за помощь!

!!! ОБНОВЛЕНИЕ !!!

я добавил еще одну таблицу под названием

Этикетки

 id label_name 

и измените таблицу словаря на:

Словарь

 id lable_id value language_id 

как я могу сделать эту работу, поэтому я могу вытащить имя метки вместо label_id

 $lables = Dictionary::whereHas('language', function($query) { $short_name = basename(__DIR__); $query->where('short_name', $short_name); })->pluck('value', 'label_id')->toArray(); 

Solutions Collecting From Web of "Laravel 5.3 Тесные отношения"

Вы можете использовать whereHas() Laravel как:

 $lables = Dictionary::whereHas('language', function($query) { $query->where('short_name', 'en'); })->get(); 

Обновить

Если вы хотите избавиться от своего foreach() вы можете использовать функцию pluck() Laravel как:

 $lables = Dictionary::whereHas('language', function($query) { $query->where('short_name', 'en'); })->pluck('value', 'label')->toArray(); 

Я думаю, это может быть что-то вроде:

 $lables = Dictionary::with('language')->where('short_name', 'en')->get();