在 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 中查询一些父数据及其子数据的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 8:在刀片视图上过滤/显示数据,数组保存在数据库中