我从数据库中获得了grade_id:
$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->select('grade_id')->get();
然后我想在where eloquent子句中使用该grade_id数组,所以我运行
$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id')
->whereIn('grade_id', $grade_id)
->get();
但是当我执行此操作时,我收到了错误:Object of class stdClass could not be converted to string
可能是什么问题?谢谢你们。
答案 0 :(得分:2)
根据laravels版本,$grade_id
是一个数组或一组对象。你需要的是一个数组或一组值。
你可以使用I pluck()
select()
方法实现这一点,就像IzzEps建议的那样。
但是您可以通过将子查询传递给whereIn()
方法来获得相同的结果:
$gradeSubquery = DB::table('grades')->where('teacher_id',$teacher_id)->select('grade_id');
$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id')
->whereIn('grade_id', $gradeSubquery)
->get();
这样您只能运行一个查询而不是两个查询。
更新:在5.2版之前,您必须使用lists()
而不是pluck()
。并且whereIn()
方法不接受Builder
作为第二个参数。要获得相同的查询,您需要使用闭包:
$home_feed = Home::join('home_grade', 'home_grade.home_id', '=', 'homes.id')
->whereIn('grade_id', function($query) use($teacher_id) {
$query->from('grades')
->where('teacher_id', $teacher_id)
->select('grade_id');
})
->get();
答案 1 :(得分:0)
您的第一个查询是返回一个集合,而不是grade_id。
请改为:$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->pluck('grade_id');
答案 2 :(得分:0)
使用列表工作。
$grade_id = Grade::where('teacher_id', $teacher_id)->lists('grade_id');
它们返回一个数组而不是一个集合
答案 3 :(得分:0)
您需要正确创建阵列。为此,请使用Eloquent使用的两个函数:pluck()
和toArray()
。请看下面的例子:
$grade_id = DB::table('grades')->where('teacher_id',$teacher_id)->pluck('grade_id')->toArray();