在 Laravel 8 中查询一些父数据及其子数据

Posted

技术标签:

【中文标题】在 Laravel 8 中查询一些父数据及其子数据【英文标题】:Query some parent data and its child data in Laravel 8 【发布时间】:2021-07-08 02:33:05 【问题描述】:

我有一个连接到其他表的人员表。它的子表之一是 BMI。一个人员有多个BMI记录。目前我有这个问题。

$personnel = Personnel::join('personnel_training', function($join) use ($request)
                $join->on('personnel.id', '=', 'personnel_training.personnel_id')
                ->where('personnel_training.training_id', $request->training); 
            )
            ->join('state', 'personnel.state_id', '=', 'state.id')
            ->join('unit', 'state.unit_id', '=', 'unit.id')
            ->select('state.name as statename','unit.name as unitname','personnel.*','personnel_training.training_id')
                    ->selectRaw("TIMESTAMPDIFF(YEAR, DATE(birth_date), current_date) AS age")
                    ->selectRaw("TIMESTAMPDIFF(YEAR, DATE(date_lastprom), current_date) AS sample")
                    ->orderBy('last_name', 'asc')
                    ->paginate(50)
                    ->appends(request()
                    ->query()); 

我的代码目前运行良好。我要完成的事情是连接 bmi 和人员表并获取人员 BMI 的最新记录。我需要添加哪些内容?我已经尝试过其他方式,但我没有运气。我在想也许子查询会给我我想要的数据,但我不知道该怎么做。我已经将人员和 bmi 模型连接成一对多的关系。

【问题讨论】:

【参考方案1】:

在你的人事模型中有这个关系函数

return $this->hasMany('Personnel', 'personnel_id');
     ->order_by('date', 'desc')
     ->limit(5);

【讨论】:

【参考方案2】:

因此,您只想访问它们之间的关系...不要认为我的评论过于苛刻,但请阅读文档,创建您向我们展示的代码比按照文档说明的操作更复杂...

你必须这样做:

Personnel::with(['personnelTraining', 'state', 'unit'])->orderBy('last_name')->paginate(50)->appends(request()->query());

然后在你的刀片中你必须处理丢失的TIMESTAMPDIFF,它会是$personnel->birth_date->diffInYears($personnel->current_date),同样的date_lastprom

我不知道request()->query() 会做什么......

【讨论】:

谢谢伙计。此功能用于根据所选培训筛选人员。这个过程是我必须选择一个培训,系统将显示所有已经接受过这些培训的人员。我想我不能使用你的建议,因为我相信它会向所有人员显示我们没有孩子的记录。 然后把with改成has就可以了。

以上是关于在 Laravel 8 中查询一些父数据及其子数据的主要内容,如果未能解决你的问题,请参考以下文章

查询获取同一张表中1:N关系的数据

java:Map借口及其子类

Laravel 8:在刀片视图上过滤/显示数据,数组保存在数据库中

从父多对多关系获取所有子模型 Laravel Eloquent

UIScrollView及其子类的嵌套联动

实体框架:查询子实体 [重复]