关联模型中使用 with 方法做字段筛选报错
这是我的模型的方法:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EduGradation extends Model
{
// 获取分类的列表
public static function getList(){
return $model = self::open()->with('subjects:id, name')->get();
}
// 定义每个分类的对应的科目
public function subjects(){
return $this->belongsToMany('App\Models\EduSubject', 'edu_gradation_subject');
}
}
当前模型也有id字段,
如果我在getList函数里面写了with('subjects:id, name')这个字段筛选的时候,就会产生sql报错,报错如下。
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous (SQL:
select `id`, ` name`, `edu_gradation_subject`.`edu_gradation_id` as `pivot_edu_gradation_id`, `edu_gradation_subject`.`edu_subject_id` as `pivot_edu_subject_id` from `edu_subjects` inner join `edu_gradation_subject` on `edu_subjects`.`id` = `edu_gradation_subject`.`edu_subject_id` where `edu_gradation_subject`.`edu_gradation_id` in (1, 2, 3, 4, 5))
貌似是id字段不明,
当时我的with('subjects')方法里面不加参数的时候,就可以使用。或者使用with('subjects, name')的时候,也是可以的。
使用的laravel版本5.7
官方文档上也是这么说的。
下面是官方文档说明:
指定特定列的渴求式加载
也许你需要加载的关联数据的字段并不多。Eloquent 允许你在加载关联数据时指定字段,就像这样:
$users = App\Book::with('author:id,name')->get();
{note} 当你使用这个特性时,你应该永远将 id 包含进来。
这是为何?
推荐文章: