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);
}

...全文
1073 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
  • 打赏
  • 举报
回复
遇到同样的问题了?顶 顶

求大侠解!!!
内容概要:本文介绍了基于噪声抑制半监督学习的锂离子电池SOH(State of Health,健康状态)估计方法的Python代码实现。该方法融合半监督学习框架与先进的噪声抑制机制,旨在利用少量标注样本和大量未标注数据,有效提升电池健康状态预测的精度与模型鲁棒性,特别适用于实际工程中电池老化数据标注成本高、样本稀缺的挑战性场景。通过设计高效的特征提取网络与可靠的伪标签生成及优化策略,模型能够有效识别并抑制训练过程中的噪声干扰,增强在复杂工况和数据波动下的泛化能力与稳定性。; 适合人群:具备一定机器学习理论基础和Python编程能力,从事电池管理系统(BMS)、新能源汽车、储能系统等领域的科研人员、工程师,以及专注于电池寿命预测、设备状态监测与智能运维等方向的硕博研究生;; 使用场景及目标:①解决锂离子电池SOH估计中标注数据获取困难、成本高昂的核心痛点;②提升模型在存在测量误差、传感器漂移或异常数据等噪声环境下的预测准确性与可靠性;③为相关科研课题提供可复现、可扩展的算法基准与开源代码框架,加速算法迭代与工程落地; 阅读建议:此资源以Python代码为核心载体,强调算法的完整复现与实验验证过程,建议读者结合代码逐模块剖析模型架构、损失函数设计与训练流程细节,并积极在自有电池数据集上进行迁移学习、参数调优与性能对比,以深入掌握半监督学习与噪声抑制技术在电池退化建模中的关键应用。

4,250

社区成员

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

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