Laravel调用with()方法报错:Call to undefined method Illuminate\Database\Query\Builder::with()
问题原因与解决办法
报错原因
DB::table('jobs')返回的是查询构造器(Query Builder)实例,而with()是Laravel Eloquent模型专属的关联预加载方法,查询构造器并没有这个方法,所以会报Call to undefined method错误。
解决方案
方案一:使用Eloquent模型(推荐)
- 确保存在
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); } }
- 修改查询代码,使用模型调用
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
相关产品推荐
相关产品推荐

