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

Laravel调用with()方法报错:Call to undefined method Illuminate\Database\Query\Builder::with()

问题原因与解决办法

报错原因

DB::table('jobs')返回的是查询构造器(Query Builder)实例,而with()是Laravel Eloquent模型专属的关联预加载方法,查询构造器并没有这个方法,所以会报Call to undefined method错误。

解决方案

方案一:使用Eloquent模型(推荐)

  1. 确保存在Job模型(路径一般为app/Models/Job.php),并在模型中定义与Company的关联关系:
// app/Models/Job.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Job extends Model
{
    // 若表名不是默认的复数形式,需指定表名
    protected $table = 'jobs';

    // 定义与Company模型的关联(假设jobs表通过company_id关联companies表)
    public function companies()
    {
        return $this->belongsTo(Company::class);
    }
}
  1. 修改查询代码,使用模型调用with()预加载关联:
// 注意:预加载指定字段时必须包含关联外键(如companies.id),否则Eloquent无法匹配关联数据
$jobs = \App\Models\Job::with('companies:id,name')
    ->where('published', 0)
    ->get();

方案二:使用查询构造器手动关联表

如果不想使用Eloquent模型,可通过join()手动关联两张表查询:

// 替换jobs.company_id和companies.id为实际的外键关联字段
$jobs = DB::table('jobs')
    ->join('companies', 'jobs.company_id', '=', 'companies.id')
    ->select('jobs.*', 'companies.name')
    ->where('jobs.published', 0)
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:04