首页 > 解决方案 > 为什么 $results = DB::select 有效,而 DB::table 无效?

问题描述

我有这个 mysql 驱动程序

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', '{database}'),
            'username' => env('DB_USERNAME', '{user}'),
            'password' => env('DB_PASSWORD', '{pass}'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

在我的 database.php 中

我有'默认'=> env('DB_CONNECTION','mysql'),

所以当我在控制器中运行时

 $results = DB::table('adventureworks2017.sales.store')->get()-first();

它给了我错误

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`store`' at line 1 (SQL: select * from `adventureworks2017`.`sales`.`store`)

尽管

 $results = DB::select('SELECT * FROM adventureworks2017.`sales.store` limit 5'); it workes

为什么查询构建器在传递语句有效时无法正常工作?

标签: phpmysqllaravel

解决方案


您可以尝试为表名传递一个原始表达式,这样查询构建器就不会尝试将您的点表示法解读为数据库和表,我想。

DB::table(DB::raw('sales.store'))->first();

甚至

DB::table(DB::raw('`sales.store`'))->first();

推荐阅读