我想在Laravel 4中重命名表,但不知道该怎么做。
SQL是alter table photos rename to images
。如果有一个雄辩的解决方案,我也想知道如何运行原始SQL,因为有时别无选择。
Answers:
在Laravel 4手册中-讨论了执行以下原始命令:
DB::select(DB::raw('RENAME TABLE photos TO images'));
编辑:我刚刚在Laravel 4文档中找到了它,可能更好:
DB::statement('drop table users');
更新:在Laravel 4.1(也许是4.0-我不确定)中,您还可以针对原始的Where查询执行此操作:
$users = User::whereRaw('age > ? and votes = 100', array(25))->get();
进一步更新如果您特别想进行表重命名-有一个用于此的模式命令-有关此信息,请参见下面的Mike回答。
Schema::rename($from, $to)
如我,@ trm42和@Mike Branski所提到的,如果没有使用正确的L4方法,为什么这是可接受的答案?请考虑对其进行更改以向其他观众提供最新答案。
I'd also like to know how to run a raw SQL
-所以我的回答是关于那部分的。您是正确的,该Schema::rename()
功能对于表重命名的特定情况很有用。
您也可以DB::unprepared
用于ALTER TABLE
查询。
DB::unprepared
旨在用于诸如之类的查询CREATE TRIGGER
。但实际上,它直接执行原始sql查询。(不使用PDOprepared
语句)
DB::query("SET foreign_key_checks=0")
;
到目前为止,我发现最好的方法是通过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);
我发现这在控制器中有效,但在迁移中无效
DB::connection()->getPdo()->exec('USE '.$dbConfig['database']);
。我在Laravel命令中删除并重新创建了数据库,并且需要这样做。
在Laravel 4中重命名表的公认方法是使用“架构”构建器。所以你想做:
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');
}
如果只想运行没有返回结果的sql脚本,请使用此命令
DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');
在laravel 5.1中测试
Laravel Raw SQL –插入查询:
让我们创建一个获取链接以插入可通过url访问的数据。因此,我们的链接名称为'insertintodb',在该函数内,我们使用db class。db类可帮助我们与数据库进行交互。我们使用db类静态函数insert。在insert函数内部,我们将编写PDO查询以在数据库中插入数据。在下面的查询中,我们将'my title'和'my content'作为数据插入posts表中。
将以下代码放在路由目录内的web.php文件中:
Route::get('/insertintodb',function(){
DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']);
});
现在从上方的浏览器链接上方触发插入查询:
localhost/yourprojectname/insertintodb
您可以通过进入数据库表来查看上述插入查询的输出。您会找到一条ID为1的记录。
Laravel Raw SQL –阅读查询:
现在,让我们创建一个获取链接来读取数据,该链接可以通过url访问。因此我们的链接名称为“ readfromdb”。我们对db类的静态函数进行读取。在读取函数内部,我们将编写PDO查询以从数据库读取数据。在下面的查询中,我们将从posts表中读取ID为'1'的数据。
将以下代码放在路由目录内的web.php文件中:
Route::get('/readfromdb',function() {
$result = DB::select('select * from posts where id = ?', [1]);
var_dump($result);
});
现在从上方浏览器链接上方的读取查询中触发:
localhost/yourprojectname/readfromdb