Laravel 5获取数据库前缀

时间:2015-04-08 02:48:22

标签: php eloquent laravel-5

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

$prefix = DB::getTablePrefix();

L5中的等价物是什么?

1 个答案:

答案 0 :(得分:6)

正如评论中所讨论的,问题不是该方法无法从外观访问,而是在基本命名空间中未正确调用外观。

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

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

  1. 检查外观是否仍然存在。外墙已注册 config/app.php文件并引用PSR-4命名空间 门面后面的课程

  2. 检查立面指向的课程。这有点棘手,需要一点点智能猜测。首先,我使用步骤1中的PSR-4类名称访问了外观定义。这指向了Laravel源代码中的this file。这只是将外观设置为指向名为“db”

    的“Service Container”中的对象

    为了找到注册此服务的内容,我不得不猜测在config/app.php文件中注册的服务提供商。有一个名为Illuminate\Database\DatabaseServiceProvider的服务,这是我看到的唯一与数据库相关的服务,所以我猜对了。这也是一个PSR-4类名,因此您可以在Laravel源代码中轻松找到该文件here

    我可以在此服务提供商中看到“db”已注册为DatabaseManager

  3. 调查外观面向的服务。 DatabaseManager在服务提供者中没有专门命名空间,因此必须存在于同一名称空间中,这意味着它将位于源中的同一文件夹中。我打开DatabaseManager并查找方法getTablePrefix。我没有找到它,但我确实找到了__call魔术方法,$this->connection()可以connection访问。

    查看\Illuminate\Database\Connection方法,我可以从该方法的PHPdoc块中看到它返回DatabaseManager,这是一个PSR-4类名(再次)。它也与我正在查看的{{1}}位于同一名称空间中。我打开proxy to another object并找到了您正在寻找的方法。

  4. 看起来外观仍然提供对方法的访问似乎有点费力,但是使用一个好的IDE(在我的情况下是PHPStorm)并且知道它的基础知识(我希望在这里描述)意味着你可以在不到一分钟的时间内完成这些工作。

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