我有一点问题,我想尝试在laravel上使用自定义查询获取数据但是当我尝试foreach时我无法获取数据。任何人都可以帮助我
控制器上的这个脚本:
$data = DB::Statement('SELECT NM_PERUSAHAAN,
count(*) as total_count,
sum(FLAG_TERIMA) as approved,
sum(1 - FLAG_TERIMA) as not_approved
from MSTBEASISWAS
group by NM_PERUSAHAAN;');
foreach ($data as $datas) {
echo $datas;
}
错误:
答案 0 :(得分:3)
这是差异
<强> DB ::原料()强>
它生成一个原始和已清理的SQL字符串,以传递给其他查询/语句,从而阻止SQL注入。是和所有人一起使用而且从不孤单。并且您永远不应该向查询/语句发送未经过清理的字符串。
DB::select(DB::raw('select * from whatever'));
<强> DB ::选择()强>
用于简单选择:
DB::select(DB::raw('select * from whatever'));
<强> DB ::语句()强>
我认为它适用于选择,但应该用于非SQL查询命令:
DB::statement(DB::raw('update whatever set valid = true;'));
<强> DB ::无准备()强>
Laravel中的所有SQL命令都是默认准备的,但有时您需要在未准备模式下执行命令,因为某些数据库中的某些命令无法在准备模式下运行。这是我打开的一个问题:
https://github.com/laravel/framework/issues/53
DB::unprepared(DB::raw('update whatever set valid = true;'));
答案 1 :(得分:2)
DB::statement()
方法用于执行SQL语句而不返回结果而是返回true/false
。
您正在尝试将此布尔值用作查询结果,以便您从foreach循环返回此消息,如果要运行select语句,则可以使用 DB::select()
,例如:
DB::select('select query here');
希望这有帮助。
答案 2 :(得分:0)
您可以编写自定义查询,如:
$data = DB::select(DB::raw('your query here'));
答案 3 :(得分:0)
DB :: statement不会返回数据。如果您正在执行不返回数据的查询,那么使用SELECT查询将导致错误。例如,如果要将MySQL表的自动增量ID启动为非零值,我们可以使用语句方法。
对于上述查询,您必须使用DB :: select。
$data=DB::Statement('SELECT NM_PERUSAHAAN,
count(*) as total_count,
sum(FLAG_TERIMA) as approved,
sum(1 - FLAG_TERIMA) as not_approved
from MSTBEASISWAS
group by NM_PERUSAHAAN;');
答案 4 :(得分:0)
您可以执行以下操作:
FileMode.Append
答案 5 :(得分:0)
DB facade的“statement”方法返回一个布尔值,该值告诉您查询执行是否成功。因此,foreach无法处理它并抛出异常。
您可以通过查看异常堆栈跟踪的第二行来理解这一点。
array('data' => true)
因此,要运行原始查询字符串,请使用以下代码:
DB::select(DB::raw('SELECT NM_PERUSAHAAN,
count(*) as total_count,
sum(FLAG_TERIMA) as approved,
sum(1 - FLAG_TERIMA) as not_approved
from MSTBEASISWAS
group by NM_PERUSAHAAN;'));