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
语句)
做到这一点的最好方法是到目前为止,我们已经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 select
, insert
, update
和delete
查询,如:
$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