在Laravel 4中,我可以这样做以获得表格前缀:
$prefix = DB::getTablePrefix();
L5中的等价物是什么?
答案 0 :(得分:6)
正如评论中所讨论的,问题不是该方法无法从外观访问,而是在基本命名空间中未正确调用外观。
使用\DB::getTablePrefix()
或在文档顶部放置use \DB as DB
可以解决问题。
根据要求,我将描述我采取的步骤,以确保仍然可以通过外观访问该方法:
检查外观是否仍然存在。外墙已注册
config/app.php
文件并引用PSR-4命名空间
门面后面的课程
检查立面指向的课程。这有点棘手,需要一点点智能猜测。首先,我使用步骤1中的PSR-4类名称访问了外观定义。这指向了Laravel源代码中的this file。这只是将外观设置为指向名为“db”
的“Service Container”中的对象为了找到注册此服务的内容,我不得不猜测在config/app.php
文件中注册的服务提供商。有一个名为Illuminate\Database\DatabaseServiceProvider
的服务,这是我看到的唯一与数据库相关的服务,所以我猜对了。这也是一个PSR-4类名,因此您可以在Laravel源代码中轻松找到该文件here
我可以在此服务提供商中看到“db”已注册为DatabaseManager
。
调查外观面向的服务。 DatabaseManager
在服务提供者中没有专门命名空间,因此必须存在于同一名称空间中,这意味着它将位于源中的同一文件夹中。我打开DatabaseManager
并查找方法getTablePrefix
。我没有找到它,但我确实找到了__call
魔术方法,$this->connection()
可以connection
访问。
查看\Illuminate\Database\Connection
方法,我可以从该方法的PHPdoc块中看到它返回DatabaseManager
,这是一个PSR-4类名(再次)。它也与我正在查看的{{1}}位于同一名称空间中。我打开proxy to another object并找到了您正在寻找的方法。
看起来外观仍然提供对方法的访问似乎有点费力,但是使用一个好的IDE(在我的情况下是PHPStorm)并且知道它的基础知识(我希望在这里描述)意味着你可以在不到一分钟的时间内完成这些工作。
Laravel 5(和PSR-4)的一个主要优点是所有类名和命名空间都应该类似于文件系统,所以一切都应该非常直观。