Yii2 跨库orm实现
实现 ORM yii2 跨库
2023-09-11 14:16:35 时间
近期在对公司的Yii2项目进行子系统拆分,过度阶段难免会有一些跨库操作,原生语句还好,加下库名前缀就可以了,可是到了orm问题就来了,特别是用到model做查询的时候,现在来记录一下跳过的坑,
像下面是通过Order的Model类的getUser方法去关联user表,如果order在库2,user在库1,就会默认关联库2的user表,然后找不到表
order::find()->alias('o'); $query->innerJoinWith('user');
有一个简单的处理方法
order::find()->alias('o'); $query->innerJoin('db1.user u', 'u.user_id = c.user_id');
改成通过传链表参数链表即可。
如果使用innerJoinWith的地方很多怎么办呢?
另一种解决方法便是如下,
public static function tableName() { preg_match("/dbname=([^;]+)/i", self::getDb()->dsn, $matches); return $matches[1] . '.table_name2'; //return '{{%table_name2}}'; } public static function getDb() { return Yii::$app->get('db2'); }
在其model文件中这样定义tableName方法,通过正则获取表对应的数据库前缀,拼接到return的表名变量,能从比较根源解决该问题
当然以上是在同一数据库服务器的前提下,才能跨库,跨服务器的跨库暂时没用方法
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章
- 算法基础:删除字符串中出现次数最少的字符(Golang实现)
- 如何在 shell 中实现并行执行
- 【语音控制】0成本实现小爱远程开关电脑
- 使用 SVN Hook 实现服务器端代码自动更新
- 【详解】线程池及其自定义线程池的实现
- 十三五光热发电5GW装机目标能否实现?
- 生产者-消费者模型(自定义类 与函数 2种实现方式)
- 《数据科学:R语言实现》——第3章 数据预处理和准备 3.1 引言
- 浅析如何利用blob对象实现粘贴图片功能及剪贴板操作Clipboard API学习
- Flutter 调用地图软件(高德、百度、腾讯、苹果)同时实现另类国际化
- ORM(Object-Relational Mapping 对象关系映射)如何实现(转)
- 同一个数据库实例,不同用户下多表创建视图,Hibernate完毕ORM映射,Spring整合,后台实现
- Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)
- Django 通过 ORM 实现表的CRUD
- Java 实现 RSA 非对称加密算法-加解密和签名验签