я использую 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();
Вы можете использовать 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();