对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比
Posted
技术标签:
【中文标题】对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比【英文标题】:A query for laravel to fetch percentage from the db rows which are "filled" and not empty 【发布时间】:2021-03-15 19:47:29 【问题描述】:我们如何获取表中用户填写的行中字段的百分比,以及从其他表行中获取与父用户有关系的关系百分比。表格示例
汽车表
id name wheels windshields seats
1 Hyundai 113 221 16
2 BMW 114 154
3 Toyota 2
如果我尝试从上表中找到百分比,结果应该是这样的:
1 = 100% details filled
2 = 80% details filled
3 = 60% details filled
现在,如果我试图让关系参与其中
***桌
id wheel_type price
113 alloy
114 chrome coated
115 rims 946
检查汽车表结果的关系百分比后应该是这样的:
1 = 90% details filled
2 = 60% details filled
3 = 60% details filled
我必须在 Laravel 中做什么才能得到这样的结果
【问题讨论】:
【参考方案1】:计算模型属性填充百分比的特征
<?php
namespace App\Models;
trait CalculatesFilledPercentage
public function filled()
$attributes = collect($this->attributes);
$totalCount = $attributes->count();
$filledCount = 0;
$attributes->keys()
->map(function ($key) use (&$filledCount)
!empty($this->$key) ? $filledCount++ : $filledCount;
);
return ($filledCount / $totalCount) * 100;
那么对于所有汽车记录
Car::all()->mapWithKeys(function($car)
return [$car->id => "$car->filled()% details filled"];
);
对于关系,需要解决两种情况:
HasOne 关系 一个相关的记录 - 相对容易计算填充父母俱乐部 HasMany 关系 许多相关记录 - 不容易填写父级俱乐部详细信息【讨论】:
以上是关于对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比的主要内容,如果未能解决你的问题,请参考以下文章
选择所有 3 列同时不为空的位置(Laravel 查询生成器)