首页 > 解决方案 > 像我们在使用 where in 子句的 sql 查询中所做的那样,在 laravel 中的 where 子句中使用一个查询结果的方法是什么?

问题描述

我在 Laravel 中写查询,但它给了我错误说

ErrorException:stdClass 类的对象无法转换为字符串

$subject_ids = DB::table('question_sets')
                   ->select('subject_id')
                   ->where('test_section_id','=',$testDetail->test_section_id)
                   ->distinct()
                   ->get();

$topic_ids = DB::table('topics')
                 ->select('id')
                 ->where('subject_id','=',$subject_ids)
                 ->get();

标签: phplaravellaravel-5laravel-query-builderlaravel-5.8

解决方案


在下面的查询中

$subject_ids = DB::table('question_sets')
                   ->select('subject_id')
                   ->where('test_section_id','=',$testDetail->test_section_id)
                   ->distinct()->get();

你得到一个集合,如果你想要一个特定的值,你可以使用first() 然后你可以做

$subject_id = DB::table('question_sets')
                  ->select('subject_id')
                  ->where('test_section_id','=',$testDetail->test_section_id)
                  ->distinct()
                  ->pluck('name')
                  ->first();

$topic_ids = DB::table('topics')
                 ->select('id')
                 ->where('subject_id','=',$subject_id)
                 ->get();

或者如果你想匹配所有 $subject_ids,你应该使用toArray()whereIn喜欢

$subject_ids = DB::table('question_sets')
                   ->select('subject_id')
                   ->where('test_section_id','=',$testDetail->test_section_id)
                   ->distinct()
                   ->pluck('subject_id')
                   ->toArray();

$topic_ids = DB::table('topics')
                 ->select('id')
                 ->whereIn('subject_id', $subject_ids)
                 ->get();

推荐阅读