laraveladmin模型关联字段值不完全一致怎么匹配

laraveladmin

2. 问题描述?

public function modelB()  
        { 
            return $this->hasOne(modelB::class, 'ccc', 'ddd'); 
        }

3. 您期望得到的结果?

ddd是modelB的字段,ddd是modelA的字段,需要把他们做关联,
但ccc的值是’123456_订单号’,ddd的值是’123456’,多了’_订单号’,
怎样修改可以完全匹配关联

4. 您实际得到的结果?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

ai 给出了三个方法 方法1:使用whereRaw实现动态截取匹配 public function modelB() { return $this->hasOne(modelB::class, 'ddd', 'ccc') ->whereRaw('SUBSTRING_INDEX(ccc, "_", 1) = modelB.ddd'); } 方法2:添加访问器动态处理

// ModelA中 public function getCccWithoutSuffixAttribute() { return explode('_', $this->ccc)[0]; }

public function modelB() { return $this->hasOne(modelB::class, 'ddd', 'ccc_without_suffix'); }

方法3:数据库层预处理(需MySQL支持) // 迁移文件 $table->string('ccc_prefix')->virtualAs("SUBSTRING_INDEX(ccc, '_', 1)");

//模型 public function modelB() { return $this->hasOne(modelB::class, 'ddd', 'ccc_prefix'); }

方法1可能影响索引使用效率 方法2需要确保访问器逻辑与业务需求一致 如果关联查询频繁,建议使用方法3

1个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!