Laravel 5 原始选择查询不返回任何内容
Posted
技术标签:
【中文标题】Laravel 5 原始选择查询不返回任何内容【英文标题】:Laravel 5 raw select query doesn't return anything 【发布时间】: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
???
【参考方案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;
我想这就是你所需要的。
【讨论】:
以上是关于Laravel 5 原始选择查询不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章
Presto:如果原始查询未返回任何行,则返回另一个表或虚拟值/表