Laravel 5获取数据库前缀

ste*_*y68 4 php eloquent laravel-5

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

$prefix = DB::getTablePrefix();
Run Code Online (Sandbox Code Playgroud)

L5中的等价物是什么?

Sco*_*pey 6

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

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

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

  1. 检查外立面是否还在那里.外观在config/app.php文件中注册,并引用外观后面的类的PSR-4命名空间

  2. 检查门面指向的是什么类.这有点棘手,需要一点点智能猜测.首先,我使用步骤1中的PSR-4类名称访问外观定义.这指向Laravel源代码中的此文件.这只是将外观设置为指向名为"db" 的" 服务容器 "中的对象

    为了找到注册此服务的内容,我不得不猜测在config/app.php文件中注册的服务提供者.有一个叫做的服务Illuminate\Database\DatabaseServiceProvider,这是我看到的与数据库有关的唯一内容,所以我猜对了.这也是一个PSR-4级的名称,以便您可以很容易地在Laravel源找到该文件在这里

    我可以在这个服务提供者中看到"db"被注册为DatabaseManager.

  3. 调查门面正面朝向的服务.DatabaseManager在服务提供程序中没有特定的命名空间,因此必须存在于同一命名空间中,这意味着它将位于源中的同一文件夹中.我打开了DatabaseManager并寻找方法getTablePrefix.我没有找到它,但我找到了一个__call魔术方法,它将代理另一个访问过的对象$this->connection().

    看一下这个connection方法,我可以从这个方法的PHPdoc块中看到它返回\Illuminate\Database\Connection一个PSR-4类名(再次).它与DatabaseManager我正在查看的名称空间相同.我打开这个文件,找到了你正在寻找的方法.

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

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