TP5.1跨模块DB类多表查询且模块下表前缀不一致的解决方法



1,表单模块表xxx_fields_data

字段
id
module

2,自定义字段表xxx_fields

id
field_data_id
is_required
field
name
type

两张表的关系xxx_fields_data.id=xxx_fields.field_data_id

使用场景,由于不同模块的表前缀不一样,所以在A模块使用XXX模块下的这两张表,表名总会补充成 A_xxx_tableName(正确的应该只是xxx_tableName)

想得到的sql结果:

SELECT `field`,`name`,`is_required`,`type` FROM `xxx_fields_data` `fields_data` LEFT JOIN `xxx_fields` `fields` ON `fields`.`field_data_id`=`fields_data`.`id` WHERE  `module` = 'customer'  AND (  `is_required` = '1' OR `type` IN ('email','integer','telephone') )

连表查询代码如下:

 $list = Db::table('xxx_fields_data')
        ->alias('fields_data')
        ->join(['xxx_fields'=>'fields'],'fields.field_data_id=fields_data.id','left')
        ->where('module','=',$module)
        ->where(function ($query) {
            $query->where('is_required', 1)
                ->whereOr('type', 'in', $this->check_type);
            })
        ->field('field,name,is_required,type')
        ->select();

重点就在标红区域,给表设定表的别名

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM