2015-01-21 47 views
2

我需要獲得第二個表的ID。我無法避免使用INNER JOIN,因爲我必須按第二個表中的列對結果進行排序。Laravel Eloquent:在Eloquent中獲得連接表的ID字段

這裏是我的2臺

events 
    id 
    name 
    .... 
    date 
... 
myevents 
    id 
    meeventID 
    meresults 
    .... 

爲了得到我想要的結果,我用下面

$finishedRaces = Myevent::where('meuserID', $user->id) 
    ->join('events', 'myevents.meeventID', '=', 'events.id') 
    ->whereRaw("`events`.`date` >= '$signupday' AND `events`.`date` <= '$today'") 
    ->orderBy('events.date','desc')->get(); 

如果我做

foreach($finishedRaces as $race){ 
    echo $race->id // this returns the id of the table events 
} 

我需要雙方的IDS表格+兩個表格中的所有值總共約20個值。 任何想法如何做到這一點? 我真的很想避免使用->select("columnname as someothername, ..."),除非我只能定義2個id列,如果可能的話。

一些要求增加

這裏相關型號+功能

class Myevent extends Model{ 

    public function sportevent() 
    { 
      return $this->hasOne('Sportevent','id','meeventID'); 
    } 

    public function athlete() 
    { 
     return $this->hasOne('User','id','meuserID'); 
    } 

} 

而且的Sportevent型號

class Sportevent extends Model{ 

    protected $table = 'events'; 
    // doesn't have a direct relation to Myevent model 
} 

在這裏,用戶模型與相關職能

class User extends Model { 

    public function myeventbydate($date){ 
     return $this->hasOne('Myevent','meuserID','id') 
      ->join('events', 'myevents.meeventID', '=', 'events.id') 
      ->where('events.date',$date)->get(); 
    } 

    public function myevents($filter=""){ 
     if($filter==""){ 
      return Myevent::where('meuserID', $this->id) 
       ->join('events', 'myevents.meeventID', '=', 'events.id') 
       ->orderBy('events.date', 'desc')->first();  
     }else{ 
      return Myevent::where('meuserID', $this->id) 
       ->join('events', 'myevents.meeventID', '=', 'events.id') 
       ->where('events.country', $filter) 
       ->orderBy('events.date', 'desc')->get(); 
     } 
    } 
} 
這兒的一部分
+0

可以顯示在你的模型是什麼關係? – 2015-01-21 21:27:10

回答

4

有時解決方案比您想象的要容易。所以基本上我也一樣,我會在一個標準的SQL查詢做:SELECT *, myevents.id AS me_id FROM ... ',然後看起來是這樣的:

$finishedRaces = Myevent::where('meuserID', $user->id) 
     ->join('events', 'myevents.meeventID', '=', 'events.id') 
     ->whereRaw("`events`.`date` >= '$signupday' AND `events`.`date` <= '$today'") 
     ->select('*','myevents.id as me_id') 
     ->orderBy('events.date','desc')->get(); 

我很害怕,我必須指定在->select聲明中的每一列,但它的工作原理以及這個。

我的ID是現在訪問的

$race->me_id; // id of table myevents 
$rade->id  // id of table events