2016-08-16 83 views
2

我正在嘗試使用數據透視表關係從數據庫更改主頁文本語言。 所有工作正常,我沒有得到任何錯誤,但登錄詞不顯示。 我有3個表Laravel 5數據透視表不起作用

語言

id | name | sign | default_back 
1 | English | en  | 1 
2 | Russian | ru  | 0 

功能

id | code | type  
70 | login | 0 

feature_language

id | feature_id | language_id | text 
1 | 70   | 2   | Ru Login 
2 | 70   | 1   | Login 

語言模型

<?php // Languages Model 
namespace App; 
use Illuminate\Database\Eloquent\Model; 
class Language extends Model 
{ 
    public function features(){ 
      return $this->belongsToMany('App\Feature'); 
    } 
    public function getDefaulLanguage(){ 
     return $this->default_back; 
    } 
    public function featureTranslation($code){ 
     return $this->features()->where('code', '=', $code)->first(); 
    } 
} 
?> 

功能特點型號

<?php // Features Model 
namespace App; 
use Illuminate\Database\Eloquent\Model; 
class Feature extends Model 
{ 
} 
?> 

指數控制器

<?php // index controller 
namespace App\Http\Controllers 
use App\Language; 
class HomeController extends Controller { 

    public function index(){ 
     $languages = Language::get(); 
     $language_default = Language::where('default_back', '>', '0')->first(); 

     return view('index')->with('languages', $languages) 
          ->with('language_default', $language_default); 
    } 
} 
?> 

索引視圖

<?php 
<h1>login : {{ $language_default->featureTranslation("login")->text}}</h1> 
?> 

任何幫助將不勝感激))

+0

我做了它使用本機mysql –

+0

請解釋更多 –

+0

我使用DB :: select(DB :: raw(「SQL QUERY」))來使用本地SQL查詢來轉換它 –

回答

1

首先,您需要在模型中定義數據透視表列的名稱。

語言模型:

public function features() 
{ 
    return $this->belongsToMany('App\Feature')->withPivot('text'); 
} 

在你索引視圖,您需要訪問數據,如下列:

{{ $language_default->featureTranslation("login")->pivot->text }} 
+0

非常感謝:)作品 –

0

由於您的數據透視表中有額外的列text,你需要 來定義列名,同時限定的關係

根據Official Doc

缺省情況下,只有在模型鍵將存在於樞軸對象上。如果您的數據透視表中包含額外的屬性,你必須定義的關係時指定它們:

public function features(){ 
    return $this->belongsToMany('App\Feature')->withPivot('text'); 
} 

以及用於獲取中間表列,您需要使用pivot屬性。

+0

試過,但我得到一個錯誤說:「基表或視圖未找到:1146表'cmslaravel.text'不存在」 –

+0

糟糕!我想我錯過了與關係中的'withPivot'。 – jonju

0

語言模型

<?php // Languages Model 
namespace App; 
use Illuminate\Database\Eloquent\Model; 
class Language extends Model 
{ 
    public function features(){ 
      return $this->belongsToMany('App\Feature', 'feature_language', 'feature_id', 'language_id')->withPivot('text'); 
    } 
    public function getDefaulLanguage(){ 
     return $this->default_back; 
    } 
    public function featureTranslation($code){ 
     return $this->features()->where('code', $code)->first()->pivot->text; 
    } 
} 
?> 

索引視圖

<?php 
<h1>login : {{ $language_default->featureTranslation("login") }}</h1> 
?>