php - YII2:从不同的表构建模型
问题描述
我是 Yii2 的新手,我对更多不同表格的模型有问题。
我有 3 个具有不同数据结构的表:
- JobOffer1(姓名、ID、日期……)
- JobOffer2(工作名称、开始日期、位置...)
- JobOffer3(描述,开始)
目标模型是:
Jobname
,StartDate
(存在于具有不同列的所有表中)
对表格的所有请求仍然存在限制。
作业控制器.php
...
// JobOffer1
$model = [];
$sql = "SELECT Name As Jobname, Date As StartDate
FROM JobOffer1,
Company1 cp1,
...
WHERE (cp1.availability IS NULL OR cp1.availability = 0)
AND ... ";
$JobOffer1 = JobOffer1::findBySql($sql)->all();
foreach ($JobOffer1 as $job) {
array_push($model, $job);
}
// JobOffer2
$sql = "SELECT JobName As Jobname, StartDate As StartDate
FROM JobOffer2,
TableXYZ xyz,
...
WHERE xyz.value > 100
AND ... ";
$JobOffer2 = JobOffer2::findBySql($sql)->all();
foreach ($JobOffer2 as $job) {
array_push($model, $job);
}
// JobOffer3
$sql = "SELECT description As Jobname, Start As StartDate
FROM JobOffer3,
$JobOffer3 = JobOffer3::findBySql($sql)->all();
foreach ($JobOffer3 as $job) {
array_push($model, $job);
}
$data = new ArrayDataProvider([
'allModels' => $model
]);
return $this->render('index', [
'data' => $data,
]);
目前,我正在使用Array
. 它可以工作,但速度很慢。而且我无法过滤和搜索视图中的数据数组。
什么是最快和最好的解决方案?我的想法是通过组装 JobOffser1-3(在所有条件下)来构建 JobModel。
这是一个想法,也许有人给我一个片段?!
解决方案
使用 QueryBuider 为 ActiveDataProvider 创建查询,并使用 Union 和字段别名来连接来自不同表的同名结果,如下所示:
$queryB = new QueryBuider();
$q = (new Query)->select('field1')->from('table1')->union('(select fieldN as field1 from tableN)')->union('...');
$queryB->buld($q)
$dataProvider = new ActiveDataPrivuder(['query'=>$queryB]);
推荐阅读
- php - TLS 证书失败,php 到 gmail
- python - Python 只在新的 csv 文件中写入最后一行
- c# - 从 IEnumerator 函数实例获取参数值
- android - 如何在kotlin中设置确认删除AlertDialogue框
- javascript - Javascript无法读取null的属性'innerText' - puppeteer
- sql - 缓慢的简单 SELECT 查询
- swift - 获取数据后更新选项卡项徽章(Swift)
- javascript - 如何使用 ReactJS 获取数组或 json 对象
- python - 如何在这些情况下循环 python mysql?
- php - 如何使用 R 从 PHP 网站上抓取表格?