Laravel 5 Eloquent ORM选择where - array作为参数

时间:2016-10-09 12:12:20

标签: mysql laravel laravel-5 eloquent

我从数据库中获得了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

可能是什么问题?谢谢你们。

4 个答案:

答案 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();