Sql 拉威尔口若悬河,何处有关系

Sql 拉威尔口若悬河,何处有关系,sql,laravel,eloquent,relation,Sql,Laravel,Eloquent,Relation,我一直在努力将这个SQL查询转换为Laravel中的雄辩查询。SQL查询可以工作(在Sequel中进行了测试),但我无法用雄辩的语言编写它 SELECT faqs.question FROM faqs JOIN categories c ON c.id = faqs.category_id WHERE c.subsite = 'sport' 这是我到目前为止尝试过的,但它会返回所有问题(忽略子网站过滤器) 感谢您根据核心sql查询提供的帮助,以下是您的laravel查询 $data = DB

我一直在努力将这个SQL查询转换为Laravel中的雄辩查询。SQL查询可以工作(在Sequel中进行了测试),但我无法用雄辩的语言编写它

SELECT faqs.question FROM faqs
JOIN categories c ON c.id = faqs.category_id
WHERE c.subsite = 'sport'

这是我到目前为止尝试过的,但它会返回所有问题(忽略子网站过滤器)


感谢您根据核心sql查询提供的帮助,以下是您的laravel查询

$data = DB::table('faqs')
            ->join('categories', 'categories.id', '=', 'faqs.category_id')
            ->select('faqs.question')
            ->where('categories.subsite', '=', 'sport')
            ->get();
希望这对你有帮助

试试这个

$cat = Faq::query();
if (isset($subsite) && !empty($subsite) {
  $query->whereHas('category', function ($query) use ($subsite) {
            $query->where('subsite', $subsite);
        });
}
$query->with('category')->get();

谢谢,这确实有效!我想尝试雄辩的方式,也不想使用纯SQL查询。无论如何,这是我的备份;)抱歉,这是我的错误,使用$query而不是$cat。您可以直接在if语句中的
$query
上调用
->get()
,不需要额外的行。(编辑你的答案和打字错误,以便我可以将其标记为解决方案?)我曾尝试建议对你的答案进行编辑,但有些人看得不够长,看不出我的观点是正确的。无论如何,如果你能改变它,我可以把它标记为一个答案!
$cat = Faq::query();
if (isset($subsite) && !empty($subsite) {
  $query->whereHas('category', function ($query) use ($subsite) {
            $query->where('subsite', $subsite);
        });
}
$query->with('category')->get();