Laravel 5.3雄辩的关系

时间:2016-10-26 22:07:42

标签: php laravel eloquent laravel-5.3

我正在使用Laravel 5.3

并且我试图从数据库中选择lang文件的值

我创建了一个文件并将其命名为global.php

并在文件中我试图这样做:

let n = CGFloat(NumberFormatter().number(from: string)!)

现在,这是有效的,但我想使用short_name字段而不是语言的id来选择行

我希望它是这样的:

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;

我的数据库看起来像这样:

语言

$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

我怎样才能完成这项工作,因此我可以拉出label_name而不是label_id

id
lable_id
value
language_id

2 个答案:

答案 0 :(得分:2)

您可以将Laravel的whereHas()功能用作:

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

<强>更新

如果您想摆脱foreach(),那么您可以使用Laravel的pluck()功能:

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

答案 1 :(得分:1)

我猜它可能是这样的:

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