Laravel 4:如何运行原始SQL?

dua*_*ty_ 70 laravel laravel-4

我想在Laravel 4中重命名一个表,但不知道该怎么做.

SQL是alter table photos rename to images.如果有一个Eloquent解决方案,我也想知道如何运行原始SQL,因为有时候别无选择.

Lau*_*nce 140

Laravel 4手册中 - 它讨论了如下的原始命令:

DB::select(DB::raw('RENAME TABLE photos TO images'));
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚在Laravel 4文档中发现了这可能更好:

DB::statement('drop table users');
Run Code Online (Sandbox Code Playgroud)

更新:在Laravel 4.1(也许是4.0 - 我不确定) - 您也可以为原始Where查询执行此操作:

$users = User::whereRaw('age > ? and votes = 100', array(25))->get();
Run Code Online (Sandbox Code Playgroud)

进一步更新如果您特别想要进行表重命名 - 有一个架构命令 - 请参阅Mike的答案.

  • Mike Branski提到了一个真正的Schema :: rename($ from,$ to)函数.使用它,它将工作,无论数据库. (4认同)
  • 因为标题是“如何运行原始 SQL?” 但问题包括一个有关重命名表的示例。这个问题还说“我还想知道如何运行原始 SQL”——所以我的答案是针对这部分的。您认为 `Schema::rename()` 函数对于表重命名的特定情况很有用,这是正确的。 (2认同)

Mik*_*ski 16

实际上,Laravel 4在Illuminate/Database/Schema/Builder.php中确实有一个表重命名功能,它现在只是没有记录:Schema::rename($from, $to);.

  • 现在,它已在Laravel 4和Laravel 4.1 [文档](http://laravel.com/docs/schema#creating-and-dropping-tables)中记录. (4认同)

smi*_*trp 15

您也可以DB::unprepared用于ALTER TABLE查询.

DB::unprepared用于查询,如CREATE TRIGGER.但实际上它直接执行原始的SQL查询.(不使用PDO prepared语句)

https://github.com/laravel/framework/pull/54


小智 10

执行此操作的最佳方法我到目前为止已经发现它可以使用Pdo对象直接执行Laravel并执行查询.

DB::connection()->getPdo()->exec( $sql );
Run Code Online (Sandbox Code Playgroud)

我通常发现一次性查询更简单,更高效,只需打开我的数据库查询工具,并使用完整语法检查键入查询,然后直接执行.

如果您必须使用存储过程或需要使用任何数据库函数,这一点就变得很重要

示例2 将created_at设置为您需要的值,并保持任何碳排放

$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id);
DB::statement($sql);
Run Code Online (Sandbox Code Playgroud)

我发现这在控制器中工作但在迁移中没有


Sea*_*ean 7

在Laravel 4中重命名表的可接受方法是使用"架构"构建器.所以你想做:

Schema::rename('photos', 'images');
Run Code Online (Sandbox Code Playgroud)

来自http://laravel.com/docs/4.2/schema#creating-and-dropping-tables

如果您真的想自己写出原始SQL查询,可以随时执行:

DB::statement('alter table photos rename to images');
Run Code Online (Sandbox Code Playgroud)

注:Laravel的DB类还支持运行原始的SQL select,insert,update,和delete查询,如:

$users = DB::select('select id, name from users');
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://laravel.com/docs/4.2/database#running-queries.