Laravel 5 Laravel以一对多关系从多个表中获取最后一行值

Laravel 5 Laravel以一对多关系从多个表中获取最后一行值,laravel-5,eloquent,greatest-n-per-group,Laravel 5,Eloquent,Greatest N Per Group,我正在构建一个具有一对多关系模型的应用程序。在该模型中,学生表与学生地址详细信息具有一对多关系。我想从address details表中检索最后一行。我被困在如何检索这些数据上。我无法从这个网站上得到类似的答案 我目前的解决办法是 $students=Student::with('visaDetails'、'address'、'instituteDetails'、'subagent', ‘员工详情’、‘佣金详情’、‘评论’->页码(16); foreach($student作为$student)

我正在构建一个具有一对多关系模型的应用程序。在该模型中,学生表与学生地址详细信息具有一对多关系。我想从address details表中检索最后一行。我被困在如何检索这些数据上。我无法从这个网站上得到类似的答案

我目前的解决办法是

$students=Student::with('visaDetails'、'address'、'instituteDetails'、'subagent',
‘员工详情’、‘佣金详情’、‘评论’->页码(16);
foreach($student作为$student){
foreach($student->地址为$address){
dd($address->id);
}
}
我的学生模型如下

class学生扩展模型
{
//与学生地址的一对多关系
公共活动地址(){
返回$this->hasMany('App\Model\Address');
}
}
但随着记录数量呈指数增长,这种解决方案并不有效。 另外,我还需要找到其他多个表的最后一行


如果有人能帮助我,那就太好了。

要从地址表中获取每个学生的最新记录,您可以进行以下自连接查询

SELECT s.*, a.*
from students s
join address a on s.id = a.student_id
left join address a1 on a.student_id = a1.student_id
and a.created_at < a1.created_at
where a1.student_id is null


我创建了一个包,允许您限制每个家长的急切加载结果数:

在父模型和相关模型中都使用
haskeetLimit
特征

class学生扩展模型{
使用\staudenMir\elounceTeagerLimit\hasWangerLimit;
}
类地址扩展模型{
使用\staudenMir\elounceTeagerLimit\hasWangerLimit;
}
然后您可以对您的关系应用
->limit(1)

$students=Student::with([
“地址”=>函数($query){
$query->limit(1);
},
“visaDetails”、“instituteDetails”、“subAgents”,
“员工详细信息”、“佣金详细信息”、“评论”
])->分页(16);

非常感谢您。这很好用。当我需要从所有多个表中填充最新的行时,我应该做什么。如地址、研究所、职员等@Bikram对于多个表来说,数据增加时会变得更加复杂,速度可能会变慢。我想您可以通过对每个表的单独查询来获取数据。对于同一查询中的多个表,逻辑与地址相同,每个表都将自连接。我现在正在使用多连接。到目前为止,性能还没有下降。让我们看看数据增加时会发生什么。
DB::table('students as s')
  ->select('s.*', 'a.*')
  ->join('address as a', 's.id', '=', 'a.student_id')
  ->leftJoin('address as a1', function ($join) {
        $join->on('a.student_id', '=', 'a1.student_id')
             ->whereRaw(DB::raw('a.created_at < a1.created_at'));
   })
  ->whereNull('a1.student_id')
  ->get();