DB :: select返回与mysql命令行

时间:2016-05-27 16:26:26

标签: php mysql laravel-5 eloquent laravel-5.2

我试图重命名MySQL数据库中的某些列,但不幸的是,该表包含enum,因此doctrine\dbal会引发错误。我决定使用原始sql编写自己的重命名功能,但我实施的一些检查失败了,我不知道为什么。

当我在MySQL CLI中时,我运行此查询:

select table_name from information_schema where table_name = "my_table" and table_schema = "my_schema";

这将返回包含表名的一行,如预期的那样。所以我想在我的迁移中,我可以做到这一点:

$exists = Schema::hasTable('my_table');

但是返回false。很奇怪,我想,所以让我们把整个Schema的事情从等式中解脱出来,然后直接尝试对information_schema

$result = DB::select('select table_name from information_schema where table_name = ? and table_schema = ?', ['my_table', 'my_schema']);

但是,当我运行该语句时,$result的值为[]。我想也许编译后的sql可能是错误的,所以我dump编辑了DB::getQueryLog()的回复,但看起来都是正确的:

array:1 [
    0 => array:3 [
        "query" => "select table_name from information_schema.tables where table_name = ? and table_schema = ?;"
        "bindings" => array:2 [
            0 => "my_table"
            1 => "my_schema"
        ]
        "time" => 0.01
    ]
]

我应该指出,当我运行php artisan tinker并运行相同的DB::select()声明时,我会得到我正在寻找的结果,所以它似乎无法正常工作就在迁移文件中。

我不知所措。为什么DB::select()会返回与在MySQL CLI上运行完全相同的查询不同的结果?

2 个答案:

答案 0 :(得分:0)

Plz使用DB:raw('select table_name from information_schema where table_name =“my_table”and table_schema =“my_schema”');

答案 1 :(得分:0)

我目前有一个解决方法。我在config/database.php文件中创建了第二个相同的连接配置文件,其连接信息与my_schema相同,只是我将database更改为information_schema。在我的迁移中,我使用以下内容:

DB::connection('my_informationschema')->select('select table_name from information_schema where table_name = ? and table_schema = ?', ['my_table', 'my_schema']);

这就是我需要的东西。因此,在使用原始查询时,应用程序似乎可以让您快速松散地使用模式,除非您正在进行迁移?