簡體   English   中英

Laravel Eloquent:在Eloquent中獲取聯接表的ID字段

[英]Laravel Eloquent: getting id field of joined tables in Eloquent

我需要獲取第二張表的ID。 我無法避免使用INNER JOIN,因為我必須按第二個表中的一列對結​​果進行排序。

這是我的兩張桌子

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
}

我需要兩個表的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');
    }

}

這是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM