You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:55:26