cakephp-从两个不相关的表中获取结果

时间:2019-05-06 20:54:07

标签: php mysql cakephp

我已经搜索了一段时间,但无济于事。我发现可能的答案令人困惑,并希望有人能为我清除它。

我有两个表(任务和安装),它们包含相似的数据,但不相同,并且除了它们都属于同一分支之外,这两个表之间没有关系。例如:

任务表

id  
branch_id  
task_name  
to_be_billed   
created  

安装表

id  
branch_id  
install_details  
to_be_billed   
created

我试图弄清楚如何获得一个结果集,该结果集将显示任一表中的每条记录,并按创建日期的顺序排列,并且仅在“ to_be_billed”列为“ 1”的地方。

有人可以给我一些指示吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我假设您想使用branch_id获得结果,并且这两个表(“任务”和“安装”)与BranchTable有某些关系。

我还假设“任务和安装表”具有分支的多个记录。

BranchTable->find()
    ->contain([
        'Tasks' => [
            'sort' => ['Tasks.created' => 'ASC'] 
        ]
    ])
    ->contain([
        'Installs' => [
            'sort' => ['Installs.created' => 'ASC'] 
        ]
    ])
    ->matching('Tasks', function ($q){
        return $q->andWhere(['Tasks.to_be_billed' => 1]);
    })
    ->matching('Installs', function ($q){
        return $q->andWhere(['Installs.to_be_billed' => 1]);
    })
    ->where(['Branch.id' => $foo]);

如果您的疑问没有使用这些假设,请告诉我。

答案 1 :(得分:0)

如果您尝试使用一个数据库查询来获取数据,则需要使用UNION运算符。

在这种情况下,您需要这两个查询具有相同的列,例如:

select 
   id,
   branch_id,
   task_name,
   NULL as install_details,
   'task' as type,
   to_be_billed,
   created
from 
   tasks_table
UNION
select 
   id,
   branch_id,
   NULL as task_name,
   install_details,
   'install' as type,
   to_be_billed,
   created
from 
   install_table

但这是一个相当肮脏的解决方案。

如果我知道您到底想达到什么目的,也许我可以建议一个更好的答案。