doctrine + sfMultiTenant 关于left join的问题

ims2007 2011-12-06 03:24:22
一纠结问题:
环境 数据库映射组件 doctrine ,为了整合 多租客 (对于这种多租客问题,可参看http://msdn.microsoft.com/zh-cn/library/aa479086.aspx) 将多数据库整合为一个,在每个表中,加一个 tenant_id 字段以区别,数据库组件加了一扩展,即加一个监听事件,插入,查找 等操作时都加上一个条件: tenant_id = xx , 这时,问题出现了,在进行leftjoin 查询操作时,select a.*,b.* from m a left join s b on a.id = b.a_id where a.tenant_id = xx and b.tenant_id = xx ;
这样,当 M 表存在的记录,而 S 表不存在时, 这些外联接记录就会查询不到(M表不为空的那些记录,而这些记录是我所需要的), 这是因为监听事件加了 b.tenant_id = xx 这个条件。
有好的解决方法吗?
不要单独的SQL 语句
这是一个大系统中的组件,不应该去更改doctrine(不过兼容也行)
最好是修改插件sfMultiTenantPlugin
    public function preDqlSelect(Doctrine_Event $event) {
$tenant = self::getTenantID();
$q = $event->getQuery();
if (self::isField($event) && $tenant > 0 && $q != null)
$q->addWhere(self::getField($event) . ' = ?', $tenant);
}

...全文
1080 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ims2007 2011-12-15
  • 打赏
  • 举报
回复
这不是MS-SQL Server的问题,它是PHP对象映射框架DOCTRINE,另外,还应用了一个多租户集成组件,这个插件是基于DOCTRINE的插件,其实这个问题的关键不在于SQL,而是对于多租户整合的数据库设计问题。http://msdn.microsoft.com/zh-cn/library/aa479086.aspx
xuzuning 2011-12-15
  • 打赏
  • 举报
回复
这个问题应该到 数据库开发——MS-SQL Server 版面求解
与 php 没什么关系,当然如果是 php 的 sqlserver 不支持的话,虽然与 php 相关,但也只能找微软解决
ims2007 2011-12-15
  • 打赏
  • 举报
回复
可能是我前面问题没有提清楚:
我在做多租户整合中遇到这样一个问题(模拟)

数据库中有两个表: users , depts

这两个表的字段如下:
users: user_id, username, dept_id, tenant_id
depts: dept_id, deptname, tenant_id

表关系为多对多

我在进行LEFT JOIN 连接查询时,写下这样一条语句:

  SELECT u.username,d.deptname from users as u
left join depts as d on u.dept_id = d.dept_id
where u.tenant_id = 1 and d.tenant_id = 1

语句中 tenant_id 为每一个租客对应的id,我这里假设为1
 这个sql 语句的意思就是查询租客ID为1 的用户所属的部门,
 但是这条有一个很致使的错误是查询不了没有部门的用户(users表中dept_id为空)

这个问题的出处是系统用 DOCTRINE + sfMultiTenantPlugin 进行查询时出现的,
请问有什么好的解决方法
ims2007 2011-12-15
  • 打赏
  • 举报
回复
没人顶
yangjingqzp 2011-12-06
  • 打赏
  • 举报
回复
遇到同样的问题了?顶 顶

求大侠解!!!
内容概要:本研究聚焦风电功率预测领域,提出了一种基于白鲸优化算法(BWO)优化CNN-BiGRU-Attention复合模型的预测方法。该方法利用卷积神经网络(CNN)提取风电数据的局部时空特征,通过双向门控循环单元(BiGRU)捕捉时间序列的长期依赖关系,并引入注意力机制(Attention)动态调整不同时间步长的特征权重,从而提升预测精度。为进一步优化模型超参数,采用白鲸优化算法(BWO)对模型的学习率、网络层数、神经元数量等关键参数进行全局寻优,解决了传统经验调参效率低、效果差的问题,最终实现了对风电功率的高精度预测。; 适合人群:具备一定编程基础,熟悉机器学习与深度学习算法,从事新能源预测、电力系统调度或相关领域研究的研发人员和科研工作者。; 使用场景及目标:①针对风电等可再生能源出力的强随机性和波动性,实现高精度的功率预测;②为电力系统调度、储能配置、电网稳定性分析等提供可靠的数据支持;③为研究者提供一个结合先进优化算法与深度学习模型的完整实现范例,用于学术研究或工程应用。; 阅读建议:此资源以Matlab代码实现为核心,不仅展示了模型构建与优化的全过程,更强调了算法设计背后的逻辑与工程考量。学习者应在理解各模块(CNN、BiGRU、Attention、BWO)原理的基础上,动手实践并调试代码,重点关注数据预处理、模型超参数优化及结果可视化等环节,以达到最佳学习效果。

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧