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

Laravel Eloquent: getting id field of joined tables in Eloquent

我需要获取第二个 table 的 id。我无法避免使用 INNER JOIN,因为我必须按第二个 table 中的列对结果进行排序。

这是我的 2 tables

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
}

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

有时解决方案比您想象的要简单。所以基本上我做了与标准 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