胶囊管理器表前缀未使用

时间:2016-06-02 21:32:21

标签: php laravel

这是一个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()方法应该允许全局静态访问?

1 个答案:

答案 0 :(得分:0)

我是个笨蛋。我需要设置'前缀'在config/database.php中,而不仅仅是Manager个实例。但这引发了另一个问题 - 数据库配置是否始终覆盖您所做的任何Manager实例,即使您将其设置为全局?或者我不理解这个吗?