php - Laravel - 多个数据库连接从 3 个表中获取平均值
问题描述
我有 3 个数据库
db_1(学生表)
id | students
1 | 42
db_2(学生表)
id | students
1 | 31
db_3(学生表)
id | students
1 | 22
在我的控制器中,如何仅使用一个模型(学生)来获得所有学生的总平均值。并且只需覆盖数据库连接。
解决方案
最重要的一点是在查询之前在 Model 上调用的setConnection()方法。请记住,以这种方式使用它,您需要在连接下的config/database.php中定义的所有连接。
class StudentsController extends Controller {
const DB_COUNT = 3;
private $students;
public function __construct(Students $students) {
$this->students = $students;
}
public function index(Request $request) {
for ($i=0; $i<self::DB_COUNT; $i++) { //or foreach through config('database.connections', [])
$this->students->setConnection('db_'.($i+1));
$students[] = $this->students->find(1)->students;
}
//what is "totalAVG" ???
$totalAvg = array_sum($students) / self::DB_COUNT;
}
}
或者,如果我们想坚持特定的连接名称:
public function index(Request $request) {
foreach (config('database.connections', []) as $connName => $params)
$this->students->setConnection($connName);
$students[] = $this->students->find(1)->students;
}
//what is "totalAVG" ???
$totalAvg = !empty($students) ? array_sum($students) / count($students) : 0;
}
推荐阅读
- python - Discord.py def check_queue 发送消息
- android - 在现有项目 React-Native 中添加现有的原生项目 Android
- excel - 自动执行 xlsx 格式时触发的此工作簿事件时,焦点命令不起作用?
- google-chrome - 如何使用 puppeteer 在“headful” chrome 中加载多个扩展?
- r - 如何使用 dplyr 在 R 中动态填充列值(避免循环)
- android - 为什么我的 Intent 在我的应用程序的设置中打开应用程序信息,而不是我传递给它的 Activity 类?
- sql - 有没有办法在一种语法中选择具有不同子查询的两个计数?
- android - 用于 cocos2dx 3.17 中的 android 版本的 Firebase C++ admob 崩溃
- regex - 搜索特定前缀的字符串,并使用正则表达式保留最后一部分
- r - 使用 R 脚本下载 MODIS 图像时出错