【问题标题】:Laravel 5 raw select query doesn't return anythingLaravel 5 原始选择查询不返回任何内容
【发布时间】:2017-10-20 14:36:24
【问题描述】:

我正在尝试从数据库中检索数据,我需要将 sql 作为原始查询运行,我就是这样做的:

$var = Nuti::select(DB::raw("select name, image, info from nuti
  where name like '%:search_term%'"), array("search_term" => $term));

return $var;

$var 返回一个空数组,但是当我尝试直接在 mysql 控制台中运行相同的查询时,它返回两条记录。

[编辑]

当我发布这个问题时,我只是缩短了查询,对原始查询的需求是做更多这样的事情:

$var = Nuti::select(DB::raw("select name, image, info from nuti
  where name like '%:search_term%'") or info %like% '%:search_term%', array("search_term" => $term));

return $var;

【问题讨论】:

  • 这里为什么需要原始查询?
  • % 左右like???

标签: php mysql laravel laravel-5 mariadb


【解决方案1】:

您可以通过以下方式做到这一点。

$data = Nuti::select(['name', 'image', 'info'])->where('name', 'like', "%{$term}%")->get();

$data = Nuti::selectRaw('name, image, info')->where('name', 'like', "%{$term}%")->get();

$data = DB::table('users')->select(['name', 'image', 'info'])->where('name', 'like', "%{$term}%")->get();

$data = DB::table('users')->selectRaw('name, image, info')->where('name', 'like', "%{$term}%")->get();

$data = DB::select("select name, image, info from nuti where name like '%{$term}%'");

【讨论】:

    【解决方案2】:

    您可能只需要添加 ->get();

    $var = Nuti::select(DB::raw("select name, image, info from nuti
          where name like '%:search_term%'"), array("search_term" => $term))->get();
    

    你可以调试:

    $var = Nuti::select(DB::raw("select name, image, info from nuti
      where name like '%:search_term%'"), array("search_term" => $term))->toSql(); 
    dd($var);
    

    edit:这个怎么样?

    $var = Nuti::select(DB::raw("select name, image, info from nuti
          where name like '%:".$term."%'"))->get();
    

    【讨论】:

    • 我尝试了调试版本,但它给了我这个:Grammar.php 第 58 行中的 ErrorException:strtolower() 期望参数 1 是字符串,给定数组
    • 更新了我的答案。
    【解决方案3】:

    如果您的查询对于查询构建器来说过于复杂,并且您想从原始查询中获取模型集合,您可以使用hydrateRaw():

    $var = Nuti::hydrateRaw(
        "select name, image, info from nuti where name like :search_term",
        array("search_term" => "%{$term}%")
    );
    

    【讨论】:

      【解决方案4】:
      $var = Nuti::select(['name', 'image', 'info'])->where('name', 'like', "%{$term}%")->get();
      return $var;
      

      我想这就是你所需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 2012-04-14
        • 2015-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多