Laravel 4:如何运行一个原始的SQL?

我想在Laravel 4中重新命名一个表格,但是不知道怎么做。

SQL将alter table photos rename to images 。 如果有一个雄辩的解决scheme,我也想知道如何运行一个原始的SQL,因为有时候没有别的select。

在Laravel 4手册中 – 它讨论如何执行原始命令:

 DB::select(DB::raw('RENAME TABLE photos TO images')); 

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

 DB::statement('drop table users'); 

更新:在Laravel 4.1(也许4.0 – 我不知道) – 你也可以做一个原始的地方Where where query:

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

进一步更新如果你正在寻找一个表格重命名 – 有一个模式命令 – 请参阅下面的Mike的答案。

实际上,Laravel 4在Illuminate / Database / Schema / Builder.php中有一个表格重命名的function,目前它只是没有文档: Schema::rename($from, $to);

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

DB::unprepared用于像CREATE TRIGGER这样的查询。 但基本上它直接执行原始的sql查询。 (不使用PDO prepared语句)

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

做到这一点的最好方法是到目前为止,我们已经find了一步Laravel,并直接使用Pdo对象执行查询。

 DB::connection()->getPdo()->exec( $sql ); 

我通常发现它更快,更有效的一次性查询,只需打开我的数据库查询工具,键入查询完整的语法检查,然后直接执行。

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

示例2将created_at设置为您需要的值,并侧面浸泡任何碳粉

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

我发现这在控制器中工作,但不是在迁移

在Laravel 4中重命名表的方法是使用Schema构build器。 所以你会想做:

 Schema::rename('photos', 'images'); 

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

如果你真的想自己写一个原始的SQL查询,你总是可以这样做:

 DB::statement('alter table photos rename to images'); 

注意:Laravel的DB类还支持运行原始SQL selectinsertupdatedelete查询,如:

 $users = DB::select('select id, name from users'); 

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

这是我如何运行RAW SELECT,获取结果和访问值的简化示例。

 $res = DB::select(' select count(id) as c from prices p where p.type in (2,3) '); if ($res[0]->c > 10) { throw new Exception('WOW'); } 

如果你只想运行没有返回resutl的SQL脚本使用这个

 DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;'); 

testing在laravel 5.1

Laravel原始的sql – 插入查询:

让我们创build一个get链接来插入可通过url访问的数据。 所以我们的链接名称是'insertintodb',并在该函数内使用db类。 数据库类帮助我们与数据库进行交互。 我们用db类的静态函数插入。 在插入函数内部,我们将编写我们的PDO查询来在数据库中插入数据。 在下面的查询中,我们将在posts表中插入“我的标题”和“我的内容”作为数据。

把下面的代码放在路由目录的web.php文件中:

 Route::get('/insertintodb',function(){ DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']); }); 

现在从上面的fire浏览器插入查询链接如下:

 localhost/yourprojectname/insertintodb 

你可以看到上面的插入查询的输出,进入你的数据库表。你会发现一个ID为1的logging。

Laravel原始的SQL – 读取查询:

现在,让我们创build一个获取链接来读取数据,这可以通过url访问。 所以我们的链接名称是“readfromdb”。 我们用db类的静态函数读取。 在读取函数内部,我们将编写我们的PDO查询来从数据库中读取数据。 在下面的查询中,我们将从post表中读取id为'1'的数据。

把下面的代码放在路由目录的web.php文件中:

 Route::get('/readfromdb',function() { $result = DB::select('select * from posts where id = ?', [1]); var_dump($result); }); 

现在在上面的fire阅读查询从浏览器链接下面:

 localhost/yourprojectname/readfromdb