Laravel Eloquent:在Eloquent中获取连接表的id字段

Edw*_*use 2 php mysql eloquent laravel-4

我需要得到第二张桌子的id.我无法避免使用INNER JOIN,因为我必须通过第二个表中的列对结果进行排序.

这是我的2张桌子

events
  id
  name
  ....
  date
 ...
myevents
  id
  meeventID
  meresults
  ....
Run Code Online (Sandbox Code Playgroud)

为了得到我想要的结果,我正在使用以下内容

$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(); 
Run Code Online (Sandbox Code Playgroud)

如果我做

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

我需要两个表的ID +两个表中的所有值总共约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');
    }

}
Run Code Online (Sandbox Code Playgroud)

这里是Sportevent模型的一部分

class Sportevent extends Model{

    protected $table = 'events';
    // doesn't have a direct relation to Myevent model
}
Run Code Online (Sandbox Code Playgroud)

这里是具有相关功能的用户模型

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();
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)

Edw*_*use 5

有时候解决方案比你想象的要容易.所以基本上我做的与我在标准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();
Run Code Online (Sandbox Code Playgroud)

我担心我必须在->select声明中指定每一列,但它可以正常工作.

我的ID现在可以访问了

$race->me_id; // id of table myevents
$rade->id     // id of table events
Run Code Online (Sandbox Code Playgroud)