我正在尝试使用laravel的简单查询,但它不返回任何数据。但是当我在phpmyadmin中运行相同的查询时,它会返回3行。
这是laravel中的代码。
$pages = DB::table('static_pages')
->where('slug','=','(select slug from static_pages where id='.$id.')')
->get();
这是它所做的查询。
select * from `static_pages` where `slug` = (select slug from static_pages where id=2)
你能告诉我可能是什么原因吗?
答案 0 :(得分:3)
如果您所指的是两个表之间的关系,那么您可能希望查看Laravel模型关系,但是如果您想要检索具有 record with id = 2
的所有记录然后你也可以不使用两个DB:raw:
DB::table('static_pages')->where('slug', function ($query) {
return $query->from('static_pages')->where( 'id', '2')->select('slug');
})->get();
如果要检查它生成的sql查询,请使用toSql()
代替->get()
要预见的一件坏事是,如果您的内部查询返回值集合,那么您的比较可能会变得有问题。但是,由于用于进行查询的字段是唯一的,因此这应该不是问题。
希望这很有用。
答案 1 :(得分:1)
它改变了这个
$pages = DB::table('static_pages')->where('slug','=','(select slug from static_pages where id='.$id.')')->get();
到这个
$pages = DB::table('static_pages')->where('slug','=',DB::table('static_pages')->where('id','=',$id)->pluck('slug'))->get();
感谢jishad
答案 2 :(得分:0)
尝试这个
DB::table('static_pages')->whereRaw("`slug` = (select slug from static_pages where id=2)")->get();
希望它会对你有所帮助!
答案 3 :(得分:0)
你可以这样做
$pages = DB::table('static_pages')->where('slug','=',DB::raw('(select slug from static_pages where id='.$id.')'))->get();