通过laravel运行时返回null的工作查询

时间:2017-09-21 11:48:35

标签: php mysql laravel

我正在尝试使用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)

你能告诉我可能是什么原因吗?

4 个答案:

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