2014-11-25 36 views
0

我有一個現有的數據庫與一個相當糟糕的架構,我不能改變。我想通過Eloquent來使用它。在使用這個數據庫時,我需要爲所有查詢添加幾個關節,如下所示:如何在每個查詢的默認情況下設置Eloquent中的連接?

<?php 
class SomeModel extends Eloquent { 

    protected $table  = 'users'; 
    protected $primaryKey = 'index'; 
    public $timestamps = FALSE; 

    function __construct($attributes = array()) 
    { 
     parent::__construct($attributes); 

     $this->leftJoin('sites', 'sites.Siteindex', '=', 'users.index'); 

     $this->leftJoin(DB::raw('(`lookups` `l`)'), function($join){ 
      $join->on('l.value', '=', 'users.type')->where('l.fieldname', '=', 'user_type'); 
     }); 
    } 
} 

是否有可能?

+0

什麼是這兩個表之間的關係類型的稱呼呢? – phaberest 2014-11-25 12:38:47

+0

@phaberest沒有真正的關係,只是一堆關節。 – user1692333 2014-11-25 12:40:07

+0

無論如何,你可以嘗試使用'hasOne()'和'belongsTo()',但是你需要有兩個模型,每個模型一個。在'User'模型中,使用名爲'sites'的方法,並在其內部返回$ this-> hasOne('Site','sites','Siteindex');',在'Site'模型中做相反的操作,但是在'users'方法中有'return $ this-> belogsTo('User','users','index');''。 – phaberest 2014-11-25 13:01:30

回答

1

而不是在用戶模型中使用__construct函數,創建一個範圍。

public function scopeGetSiteIndex($query) { 
    return $query->leftJoin('sites', 'sites.Siteindex', '=', 'users.index'); 
} 

然後你可以從控制器

$siteIndex = User::getSiteIndex()->get(); 
+1

當使用'連接'時,請記得也使用'select',否則連接表的'id'將覆蓋主表的'id',您將體驗意外的行爲。 – 2014-11-25 15:50:41

+0

不知道爲什麼,但像這樣paginate的方式返回空數據... – user1692333 2014-11-26 07:01:32

+0

我有與paginate相同的問題。我通過從Laravel 4.2.11恢復到4.2.0來修復它。它必須是一個錯誤。 – Robbie 2014-11-27 03:05:35

相關問題