2017-02-16 39 views
0

我正在玩弄我的第一個Laravel項目,上面的問題可能有點混淆,但讓我解釋一下: -(Laravel)從表格中獲取ID與另一個表格鏈接的表格中的數據

我有3個表(其實我有更多的,但讓我們忽略它),我有standardsstddetails & sections如下所示: -

Databases

所以外鍵對應低於: -

從表 sections =列 ssctionFKstddetails

    • stdPK從表standards =列stdFK
      stddetails

    和情景是這樣的: -

    可以說我有一個$id匹配stdPK從表standards與那$id,我需要得到表sections的所有數據。問題是,我無法找到正確的查詢,因爲standardssections表只與stddetails表相關聯。

    目前我在我的web.php查詢是這樣的: -

    Route::get('getstddtl/{id?}', function ($id) { 
    
        $stdsec = Section:: 
          leftJoin('stddetails', 'ssctionFK', '=', 'ssctionPK') 
          ->join('standards', function($join) use ($id){ 
           $join->on('stdPK', '=', 'stdFK') 
             ->where('stdFK', $id); 
          }); 
    
        return view('standarddtl', [ 
         'stdsec' => $stdsec 
    
        ]); 
    }); 
    

    我想這應該很容易,孩子......我錯了......我希望有人能幫助我,因爲我的大腦有思維能力非常有限。

    UPDATE 1: -

    我已經設置在每個模型中的口才關係,並使用Laravel的鋒方法中檢索數據: -

    $stdsec = Stddetail::with('section')->find($id); 
    

    的所有數據被從兩個stddetails & sections檢索現在的問題是在顯示頁面中顯示來自列ssctionNamesections表中的數據時遇到問題,因爲它返回錯誤。

    顯示頁面上的相關代碼如下: - 顯示

    @foreach ($stdsec as $task) 
         {{strtoupper($task->ssctionName)}} 
    @endforeach 
    

    錯誤: -

    Error on display foreach

    我覺得口才方法是好的,現在顯示的部分是給我麻煩。有關如何解決這個問題的任何想法?

    更新2: -

    這裏的每個表的模式: -

    standards標準模型: -

    namespace App; 
    
    use Illuminate\Database\Eloquent\Model; 
    
    class Standard extends Model 
    { 
    
        public $primaryKey = 'stdPK'; 
    
        public function stddetail() 
        { 
         return $this->hasMany(Stddetail::class, 'stdFK', 'stdPK'); 
        } 
    } 
    

    stddetailsStddetail模型: -

    namespace App; 
    
    use Illuminate\Database\Eloquent\Model; 
    
    class Stddetail extends Model 
    { 
        public $table = "stddetails"; 
        public $primaryKey = 'sdtlPK'; 
        protected $fillable = ['stdFK', 'sdtlPgNo', 'sdtlLnNo', 'sdtlText', 'sdtlShrtnote', 'sdtlSchm', 'svrFK', 'ssctionFK', 'sdtlRefLbl']; 
    
        public function standard() 
        { 
         return $this->belongsTo(Standard::class, 'stdFK'); 
        } 
    
        public function section() 
        { 
         return $this->belongsTo(Section::class, 'ssctionFK'); 
        } 
    
    } 
    

    sections模型: -

    namespace App; 
    
    use Illuminate\Database\Eloquent\Model; 
    
    class Section extends Model 
    { 
        public $primaryKey = 'ssctionPK'; 
        public function stddetails() 
        { 
         return $this->hasMany(Stddetail::class, 'ssctionFK', 'ssctionPK'); 
        } 
    } 
    
  • +0

    這不是打算如何使用數據庫。但是你可以用pk作爲外鍵進行一些連接。 –

    +0

    看看關係嗎?屬於/有很多? – senty

    +0

    @ThomasMoors Owh,不知道..其實有很多表互相鏈接,但在我正在處理的一個頁面上,使用這3個表.. – Kaydarin

    回答

    2

    在雄辯的關係請看:https://laravel.com/docs/5.4/eloquent-relationships

    你應該能夠之間設置適當的關係(的hasMany,屬於關聯等)的模型(表格)並通過一個命令獲取所有數據(Eloquent將爲您創建所需的查詢)。

    在一個不相干的筆記上,我會建議改進你的命名約定。真的很難理解事件與所有使用的縮寫詞和短名稱的基本鏈接

    +0

    你是什麼意思「雄辯會爲你創建所需的查詢」?我認爲我們需要自己創建查詢......我確實在每個表模型中設置了關係...... – Kaydarin

    +0

    使用ORM的整個目的就像Eloquent。你只是'用'流利的語法來編寫代碼,如果你的關係設置正確,那麼只需使用Models就可以獲得所有的數據。 – Nerman

    +1

    例如: '$ details = Standards :: with('stddetails') - > find($ id);' 將返回具有集合類型屬性_stddetails_的標準模型。 你不必編寫SQL查詢,Eloquent爲你做了。它的目的是從你的層抽象,所以你可以寫代碼 (對不起約兩個評論,我打太快,所以我不會讓我編輯第一個評論) – Nerman

    相關問題