手动将查询写入laravel

时间:2017-09-22 10:57:08

标签: php laravel laravel-5

我有一点问题,我想尝试在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;
}

错误:

enter image description here

6 个答案:

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

参考:Difference between Laravel's raw SQL functions

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