Laravel 5.3 Eloquent 关系
Laravel 5.3 Eloquent Relationships
我正在使用 Laravel 5.3
我正在尝试从数据库中 select 语言文件的值,
我创建了一个文件并将其命名为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;
现在,这是可行的,但我想 select 使用 short_name 字段的行,而不是语言的 id
我希望它是这样的:
$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');
}
}
感谢您的帮助!
!!!更新!!!
我又加了 1 个 table 叫
标签
id
label_name
并将字典 table 更改为:
词典
id
lable_id
value
language_id
我怎样才能做到这一点,这样我就可以拉 label_name 而不是 label_id
$lables = Dictionary::whereHas('language', function($query) {
$short_name = basename(__DIR__);
$query->where('short_name', $short_name);
})->pluck('value', 'label_id')->toArray();
我猜它可能是这样的:
$lables = Dictionary::with('language')->where('short_name', 'en')->get();
您可以将 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();
我正在使用 Laravel 5.3
我正在尝试从数据库中 select 语言文件的值,
我创建了一个文件并将其命名为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;
现在,这是可行的,但我想 select 使用 short_name 字段的行,而不是语言的 id
我希望它是这样的:
$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');
}
}
感谢您的帮助!
!!!更新!!!
我又加了 1 个 table 叫
标签
id
label_name
并将字典 table 更改为:
词典
id
lable_id
value
language_id
我怎样才能做到这一点,这样我就可以拉 label_name 而不是 label_id
$lables = Dictionary::whereHas('language', function($query) {
$short_name = basename(__DIR__);
$query->where('short_name', $short_name);
})->pluck('value', 'label_id')->toArray();
我猜它可能是这样的:
$lables = Dictionary::with('language')->where('short_name', 'en')->get();
您可以将 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();