这是一个Laravel网站,只是表格前缀有问题。
它有一个名为cleaning_pages
的静态页面的MySQL表,在public/index.php
中,我在Kernel
的实例化之前放了以下内容:
use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule();
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'somehost.com',
'database' => 'database',
'username' => 'username',
'password' => 'password',
'port' => 3306,
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'cleaning_',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
我已经给它前缀cleaning_
以节省丑陋的类名。然后,我创建了一个名为Page
的新Eloquent模型类,但是如果我在其他地方静态调用它,那么:
public function fetchPage($slug)
{
return \App\Models\Page::where('page_slug', '=', $slug)->get();
}
抛出QueryException
:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database.pages' doesn't exist
但是,如果仅仅是为了测试这一点,我会将以下内容放在index.php
文件中,紧跟在$capsule
以上的内容之后:
print_r(\App\Models\Page::where('page_slug', '=', $slug)->get());
查询正确的表格。我认为Manager::setAsGlobal()
方法应该允许全局静态访问?
答案 0 :(得分:0)
我是个笨蛋。我需要设置'前缀'在config/database.php
中,而不仅仅是Manager
个实例。但这引发了另一个问题 - 数据库配置是否始终覆盖您所做的任何Manager
实例,即使您将其设置为全局?或者我不理解这个吗?