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
我需要获取第二个 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