85

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

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

4

7 回答 7

156

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 的答案。

于 2013-02-04T13:49:55.987 回答
16

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

于 2013-03-08T21:11:38.783 回答
15

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

DB::unprepared旨在用于类似的查询CREATE TRIGGER。但本质上它直接执行原始 sql 查询。(不使用 PDOprepared语句)

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

于 2013-07-26T08:46:07.767 回答
10

到目前为止,我发现最好的方法是绕过 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);

我发现这在控制器中有效,但在迁移中无效

于 2014-05-23T15:45:31.377 回答
8

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

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

于 2014-09-30T16:30:44.153 回答
3

这是我如何运行 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 中测试

于 2016-01-12T23:14:28.467 回答
2

Laravel raw sql - 插入查询:

让我们创建一个获取链接以插入可通过 url 访问的数据。所以我们的链接名称是“insertintodb”,在该函数中我们使用 db class 。db 类帮助我们与数据库交互。我们使用 db 类静态函数 insert 。在插入函数中,我们将编写 PDO 查询以在数据库中插入数据。在下面的查询中,我们将在帖子表中插入“我的标题”和“我的内容”作为数据。

将以下代码放入路由目录内的 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 类静态函数读取。在 read 函数中,我们将编写 PDO 查询以从数据库中读取数据。在下面的查询中,我们将从帖子表中读取 id 为“1”的数据。

将以下代码放入路由目录内的 web.php 文件中:

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

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

localhost/yourprojectname/readfromdb
于 2017-06-20T11:43:00.067 回答