Laravel中如何从多表获取地址重复的公司数据
Laravel 查询地址重复的公司
要获取所有地址重复的公司,核心思路是先找出addresses表中重复的地址字段组合(a1、a2、city、state),再关联companies表拿到对应的公司信息。以下是两种实现方式:
方式一:使用DB门面直接查询
$duplicateCompanies = DB::table('companies') ->join('addresses', 'companies.id', '=', 'addresses.company_id') ->select('companies.id', 'companies.name') ->whereIn( ['a1', 'a2', 'city', 'state'], DB::table('addresses') ->select('a1', 'a2', 'city', 'state') ->groupBy('a1', 'a2', 'city', 'state') ->havingRaw('COUNT(*) > 1') ) ->orderBy('companies.id') ->get();
方式二:使用Eloquent模型查询
假设已定义Company和Address模型并设置关联:
// Company.php 模型关联 public function address() { return $this->hasOne(Address::class); } // Address.php 模型关联 public function company() { return $this->belongsTo(Company::class); } // 查询逻辑 $duplicateAddressGroups = Address::select('a1', 'a2', 'city', 'state') ->groupBy('a1', 'a2', 'city', 'state') ->havingRaw('COUNT(*) > 1') ->get() ->toArray(); $addressConditions = array_map(fn($addr) => [$addr['a1'], $addr['a2'], $addr['city'], $addr['state']], $duplicateAddressGroups); $duplicateCompanies = Company::whereHas('address', function ($query) use ($addressConditions) { $query->whereIn(['a1', 'a2', 'city', 'state'], $addressConditions); }) ->select('id', 'name') ->orderBy('id') ->get();
两种方式最终都会返回符合要求的公司集合,结构与你给出的示例结果一致。
内容的提问来源于stack exchange,提问作者issdilshod
相关产品推荐
相关产品推荐

