为什么$ results = DB :: select有效而DB :: table不起作用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么$ results = DB :: select有效而DB :: table不起作用?相关的知识,希望对你有一定的参考价值。
我是laravel的新手。
我有这个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中
我有'default'=> 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`)
while
$results = DB::select('SELECT * FROM adventureworks2017.`sales.store` limit 5'); it workes
任何原因查询生成器在传递语句有效时都无法正常工作吗?
答案
假设您的表实际上称为sales.store
,这:
$results = DB::table('adventureworks2017.sales.store')->get()-first();
实际上应该是:
$results = DB::table('adventureworks2017.`sales.store`')->first();
注意表名前后使用反引号。
顺便说一句,我不建议在表名中使用点(.
)。
以上是关于为什么$ results = DB :: select有效而DB :: table不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
在 CodeIgniter 中调用未定义的方法 CI_DB_mysqli_result::where()
CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个