Laravel 5获取DB前缀


Laravel 5 Get DB Prefix

在Laravel 4中,我可以这样做来获得表前缀:

$prefix = DB::getTablePrefix();

L5中的等效项是什么?

正如评论中所讨论的,问题不是不能从facade访问该方法,而是在基本命名空间中没有正确调用facade。

使用'DB::getTablePrefix()或将use 'DB as DB放置在文档顶部可以解决此问题。

根据要求,我将描述我为确保该方法仍然可以通过facade访问而采取的步骤:

  1. 检查外立面是否还在。立面注册于CCD_ 3文件,并引用正面后面的类

  2. 检查facade指向的类。这有点棘手,需要一点聪明的猜测。首先,我使用步骤1中的PSR-4类名访问facade定义。这指向了Laravel来源中的这个文件。这只需将facade设置为指向名为"db"的"服务容器"中的对象

    为了找到注册该服务的内容,我必须猜测在config/app.php文件中注册的服务提供商。有一个名为Illuminate'Database'DatabaseServiceProvider的服务,这是我看到的唯一与数据库相关的东西,所以我猜到了。这也是一个PSR-4类名,所以你可以很容易地在这里的Laravel源中找到文件

    我可以在这个服务提供商中看到,"db"注册为DatabaseManager

  3. 调查facade所提供的服务DatabaseManager在服务提供商中没有特定的名称空间,因此必须存在于同一名称空间中,这意味着它将位于源中的同一文件夹中。我打开DatabaseManager并查找方法getTablePrefix。我没有找到它,但我确实找到了一个__call魔术方法,它将代理到另一个使用$this->connection()访问的对象。

    查看connection方法,我可以从该方法的PHPdoc块中看到,它返回了一个'Illuminate'Database'Connection,它是PSR-4类名(再次)。它也和我正在查找的DatabaseManager在同一个命名空间中。我打开了这个文件,找到了你正在查找的方法。

查找facade是否仍然提供对方法的访问似乎有点费力,但使用一个好的IDE(在我的例子中是PHPStorm)并了解它的基本知识(我希望在这里描述)意味着你可以在不到一分钟的时间内查到这些东西。

Laravel 5(和PSR-4)的一个主要优点是,所有的类名和名称空间都应该类似于文件系统,所以一切都应该非常直观。