如何将原生 PHP 转换为查询构建器 Laravel?
Posted
技术标签:
【中文标题】如何将原生 PHP 转换为查询构建器 Laravel?【英文标题】:How can I convert native PHP into query builder Laravel? 【发布时间】:2019-03-07 03:15:24 【问题描述】:如何从原生 php 转换为查询构建器 laravel
$statsMoneyInPlay = array();
$sql_query = "SELECT UNIX_TIMESTAMP(Date(ts))*1000 As ts, sum(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count(*) As moneyInPlay FROM enginepoker_log.poker WHERE GROUP BY Date(ts) ORDER BY Date(ts) LIMIT 30 ";
我已经创建了查询生成器,但仍然出现错误。 这就是错误
(2/2) QueryException SQLSTATE[42000]: 语法错误或访问 违规:1064 您的 SQL 语法有错误;检查手册 对应于正确语法的 MariaDB 服务器版本 在 'SELECT UNIX_TIMESTAMP(Date(ts)*100 as ts) 附近使用,sum(pot + p1pot + p2pot + p3pot + p4p' 在第 1 行(SQL:选择 SELECT UNIX_TIMESTAMP(日期(ts)100 as ts), sum(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count() As moneyInPlay 来自
enginepoker_log
.poker
group byDate(ts)
orderDate(ts)
asc)
这是查询生成器:
$statsMoneyInPlay = DB::table('enginepoker_log.poker')
->selectRaw("SELECT UNIX_TIMESTAMP(Date(ts)*100 as ts)")
->selectRaw("sum(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count(*) As moneyInPlay")
->groupBy("Date(ts)")
->orderBy("Date(ts)")
->get()
->toArray();
这是在刀片页面中
@php
foreach ($statsMoneyInPlay as $key => $value)
echo "[".$value[0].", ".$value[1]."],";
@endphp
【问题讨论】:
请添加到目前为止您尝试过的操作。它应该可以帮助我们帮助您。 好的,我已经添加了我的问题@JaimeRojas 【参考方案1】:您要查找的查询应该看起来更像这样:
$statsMoneyInPlay = DB::table('enginepoker_log.poker')
->select(
DB::raw("UNIX_TIMESTAMP(Date(ts)*100) as timestamp"),
DB::raw("SUM(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count(*) As moneyInPlay")
)
->groupBy(DB::raw("DATE(ts)"))
->orderByRaw("DATE(ts)")
->get()
->toArray();
在刀片中,您可以通过以下方式访问元素:
foreach($statsMoneyInPlay as $stat)
echo "[" . $stat->timestamp . ", " . $stat->moneyInPlay . "]";
【讨论】:
我仍然收到错误这是错误所说的 (2/2) QueryException SQLSTATE[42000]: 语法错误或访问冲突: 1583 调用本机函数 'UNIX_TIMESTAMP' 中的参数不正确 (SQL: select UNIX_TIMESTAMP(日期(ts)*100 作为时间戳), SUM(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count(*) As moneyInPlay fromenginepoker_log
.poker
group按日期(ts)按日期(ts))
这很可能是由于括号放错了。我已经更新了查询,
谢谢,但我在访问时遇到了一些问题,我收到类似这样的错误无法在 C:\xampp\htdocs\enginepoker2\storage\framework\views\10cbbd076bede57a96e59c43af0e1b9e022b4a69.php 中使用 stdClass 类型的对象作为数组在 115 号线
问题不再在于查询,而在于您处理数组的方式。正确的做法是用这个答案结束这个问题并提出一个新问题。不过,我会更新我的答案,向您展示正确的处理方法。以上是关于如何将原生 PHP 转换为查询构建器 Laravel?的主要内容,如果未能解决你的问题,请参考以下文章