我想在Laravel 4中重命名一张表,但不知道如何操作。
SQL语句是alter table photos rename to images
。如果有Eloquent解决方案,我也想知道如何运行原始的SQL,因为有时没有其他选择。
在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的答案。
实际上,Laravel 4 在 Illuminate/Database/Schema/Builder.php 中确实有一个表格重命名函数,只是目前没有文档记录: Schema::rename($from, $to);
.
DB::unprepared
来执行ALTER TABLE
查询。
DB::unprepared
主要用于执行类似于CREATE TRIGGER
的查询。但它本质上直接执行原始的SQL查询。(不使用PDO prepared
语句)
https://github.com/laravel/framework/pull/54DB :: query(“SET foreign_key_checks = 0”)
时,它对我有效。 - swdev到目前为止,我发现最好的方法是绕过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 命令中删除并重新创建数据库,所以需要这样做。 - Aditya M PSchema::rename('photos', 'images');
来源:http://laravel.com/docs/4.2/schema#creating-and-dropping-tables
如果你真的想要自己编写原始的SQL查询,你可以这样做:
DB::statement('alter table photos rename to images');
select
、insert
、update
和delete
查询,例如:$users = DB::select('select id, name from users');
$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');
}
DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');
已在 Laravel 5.1 中测试通过。
Laravel原生SQL - 插入查询:
让我们创建一个可通过URL访问的插入数据链接。我们将链接命名为“insertintodb”,并在该函数中使用db类。db类帮助我们与数据库交互。我们使用db类静态函数insert。在insert函数内,我们将编写用于将数据插入数据库的PDO查询。在下面的查询中,我们将“my title”和“my content”作为数据插入到posts表中。
请将以下代码放入routes目录中的web.php文件中:
Route::get('/insertintodb',function(){
DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']);
});
localhost/yourprojectname/insertintodb
您可以通过进入数据库表来查看上述插入查询的输出。您将找到一条ID为1的记录。
Laravel原始SQL - 读取查询:
现在,让我们创建一个获取链接以读取数据,可通过URL访问。所以我们的链接名称是“readfromdb”。我们使用db类静态函数read。在read函数内部,我们将编写我们的PDO查询以从数据库中读取数据。在下面的查询中,我们将从posts表中读取id为“1”的数据。
请将以下代码放入routes目录中的web.php文件中:
Route::get('/readfromdb',function() {
$result = DB::select('select * from posts where id = ?', [1]);
var_dump($result);
});
localhost/yourprojectname/readfromdb
Schema::rename($from, $to)
,正如我、@trm42和@Mike Branski所提到的那样?请考虑更改它,以便为其他观众提供最新的答案。 - Sean the BeanSchema :: rename()
函数对于表重命名的特定情况非常有用。 - Laurence