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

Laravel:如何获取未出现在表B中的表A用户集合?

在Laravel中获取未出现在表B的用户

嘿,针对你给出的表结构,要从表A(用户表)里找出那些从未出现在表B的user字段中的用户,我给你整理了几种Laravel里常用的实现方式:

方法一:使用查询构造器(Query Builder)

如果不想用ORM模型,直接用DB门面写原生风格的查询就很方便,核心思路是用whereNotIn配合子查询,先取出表B里所有的用户ID,再筛选表A中不在这个集合里的记录:

$users = DB::table('A')
    ->whereNotIn('Id', function ($query) {
        $query->select('user')
            ->from('B');
    })
    ->get();

执行后就能得到Tom(Id=2)和Paul(Id=4)这两个符合要求的用户。

方法二:使用Eloquent模型(推荐,更贴合Laravel风格)

如果已经定义了对应的Eloquent模型(比如User对应表A,Item对应表B),那用ORM的关联方法会更优雅:

首先在User模型里定义和Item的关联关系:

// app/Models/User.php
public function items()
{
    // 关联表B的user字段到当前模型的Id字段
    return $this->hasMany(Item::class, 'user', 'Id');
}

然后直接用doesntHave方法就能筛选出没有关联任何Item的用户:

$users = User::doesntHave('items')->get();

要是之后需要加更复杂的筛选条件,还可以用whereDoesntHave,不过当前需求用doesntHave就完全够用啦。

另外还有一种性能更优的写法,用whereNotExists子查询,适合表B数据量较大的场景:

$users = User::whereNotExists(function ($query) {
    $query->select(DB::raw(1))
        ->from('B')
        ->whereColumn('B.user', 'users.Id');
})->get();

以上几种方法都能实现你的需求,你可以根据项目的实际情况选择最合适的~

内容的提问来源于stack exchange,提问作者Louisdrake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:37:53