php - 为什么 $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
为什么查询构建器在传递语句有效时无法正常工作?
解决方案
您可以尝试为表名传递一个原始表达式,这样查询构建器就不会尝试将您的点表示法解读为数据库和表,我想。
DB::table(DB::raw('sales.store'))->first();
甚至
DB::table(DB::raw('`sales.store`'))->first();
推荐阅读
- javascript - 带有两个条件的循环始终为真
- angular - 使用 [routerLink] 代替带有简单 url 的 routerLink 有什么好处
- git - 尝试通过 SSH 克隆时“似乎不是 git 存储库”
- r - 为什么 dmultinom MLE 的优化在 R 中错误地收敛?
- azure - 我们应该如何在远程 IoT Edge 部署中管理 Moby/Docker 映像?
- python - 如何从 .txt 文件加载 json 对象列表?
- c# - 从 Azure 容器和子目录中获取所有 blob Uris
- r - 使用特定行中的值过滤 R 中的列
- java - holder.btn_email.setOnClickListener
- sql - 在这个带有左连接和过滤器的选择查询中我做错了什么?