模型中多态的多对多关系,如果关联表中的外键 id 类型是 varchar 类型,但是存入的是 int 型数据,那么删除关联数据时会报错 
                            
                                                    
                        
                    
                    
  
                    
                    环境:
laravel版本:5.5
mysql版本:5.7
php版本:7.2
表关系
在使用<多态多对多>做标签时,有四张表
主表1:table1 (主键为uuid,例:4746c007-0be8-4cce-a4d0-d0e33fd469b7)
主表2:table2 (主键为自增int)
标签表:tags
关联表 taggables (字段为:tag_id<char 36>  ,taggable_id<char 36>, taggable_type<varchar 191>)
关联表中分别插入table1的主键信息和table2的主键信息。
问题描述
由于table1和table2的主键类型不一样,所以我给关联表中的taggable_id设置为char类型,插入和查询没有问题,但是删除的时候,
执行$table2Model->tags()->detach([tag_id1,tag_id2]),会出现如下错误:
Error : Truncated incorrect DOUBLE value
执行
$table1Model->tags()->detach([tag_id1,tag_id2]),则正常删除。
初步排查
- 在打印删除sql语句的时候,发现如下
delete from `taggables` where `taggable_id` = 14 and `taggable_type` = "table2" and tag_id` in ("1bcecc13-e873-499c-913c-d9246a898180") - 已知
已知mysql在字段类型是字符型,但值却用了数字类型,在update,或者delete的时候会出现sql报错:Error : Truncated incorrect DOUBLE value 如上sql语句改成 delete from `taggables` where `taggable_id` = '14' and `taggable_type` = "table2" and tag_id` in ("1bcecc13-e873-499c-913c-d9246a898180") 就不会报错。 
但是,此删除语句是执行$table2Model->tags()->detach([tagid1,tagid2])生成的,在不建立关联表模型的情况下,我应该如何改,才能生成正确的sql语句呢?
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: