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

Laravel 8中如何查询当前用户未使用的文档类型

解决Laravel查询用户未使用文档类型的问题

首先,你的代码存在两个问题:

  • 拼写错误:docments、douments 都是 documents 的笔误
  • 缺少关键筛选条件:左连接后未过滤已关联的记录,导致返回了包含已使用的类型

下面提供两种可行的解决方案:

方案一:修正左连接查询

修正拼写错误,并添加 whereNull('documents.id') 筛选未关联的记录,同时指定查询字段避免冲突:

$document_types = TypeDocument::leftJoin('documents', function ($join) {
                    $join->on('type_documents.id', '=', 'documents.type_document_id')
                         ->where('documents.user_id', auth()->id());
                })
                ->whereNull('documents.id') // 筛选当前用户未使用的类型
                ->select('type_documents.*') // 只查询文档类型表的字段
                ->applyFilters($request->all())
                ->latest()
                ->paginateData($limit);

方案二:使用Eloquent关联查询(更推荐)

先在 TypeDocument 模型中定义关联关系:

// app/Models/TypeDocument.php
public function documents()
{
    return $this->hasMany(Document::class);
}

然后使用 whereDoesntHave 方法直接筛选当前用户未关联的文档类型:

$document_types = TypeDocument::whereDoesntHave('documents', function ($query) {
                    $query->where('user_id', auth()->id());
                })
                ->applyFilters($request->all())
                ->latest()
                ->paginateData($limit);

这种方式更符合Eloquent的优雅写法,也避免了手动连接表的拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:50:17