问答 / 77 / 1 / 创建于 4个月前
laraveladmin
public function modelB() { return $this->hasOne(modelB::class, 'ccc', 'ddd'); }
ddd是modelB的字段,ddd是modelA的字段,需要把他们做关联,但ccc的值是’123456_订单号’,ddd的值是’123456’,多了’_订单号’,怎样修改可以完全匹配关联
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
我要举报该,理由是:
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