2015-04-08 4 views
2

В Laravel 4 я мог бы сделать это, чтобы получить префикс таблиц:Laravel 5 Получить DB Префикс

$prefix = DB::getTablePrefix(); 

Что эквивалент в L5?

+0

Вы пробовали? Это должно работать так же. – Scopey

+0

Да, 'Class 'App \ DB' not found' – sterfry68

+2

Убедитесь, что вы ссылаетесь на фасады в базовом пространстве имен. Попробуйте '\ DB :: getTablePrefix();'. Вероятно, у вас будет 'namespace App' в верхней части вашего файла, а это значит, что вы больше не работаете в базовом пространстве имен. Я могу дать вам ответ, описывающий, как следовать определению фасада и как я полагаю, что этот метод должен работать, если вам интересно. – Scopey

ответ

4

Как обсуждалось в комментариях, проблема заключалась не в том, что метод не был доступен с фасада, а скорее в фазовом пространстве имен неправильно.

Использование \DB::getTablePrefix() или размещение use \DB as DB в верхней части документа решает проблему.

В соответствии с просьбой, я опишу шаги, которые я сделал, чтобы обеспечить метод был еще доступен через фасад:

  1. Проверьте фасад еще там. Фасады зарегистрированы в файл config/app.php и относятся к пространству имен PSR-4 класса за фасадом

  2. Проверьте, какой класс фасадных точек на. Это немного сложнее и требует немного разумных догадок. Во-первых, я получил доступ к определению фасада с использованием имени класса PSR-4 с шага 1. Это указывает на this file в источнике Laravel. Это просто устанавливает, что фасад указывает на объект в «Service Container» под названием «db»

    Чтобы узнать, что регистрирует эту службу, мне пришлось угадать поставщика услуг, который зарегистрирован в файле config/app.php. Есть служба под названием Illuminate\Database\DatabaseServiceProvider, которая является единственной вещью, которую я видел, связанной с базой данных, поэтому я догадался. Это также имя класса PSR-4, поэтому вы можете легко найти файл в источнике Laravel. here

    Я вижу в этом провайдере услуг, что «db» зарегистрирован как DatabaseManager.

  3. Исследуйте обслуживание фасада фасада. DatabaseManager конкретно не содержит имен в поставщике услуг и поэтому должен существовать в одном и том же пространстве имен, что означает, что он будет находиться в той же папке в источнике. Я открыл DatabaseManager и искал метод getTablePrefix. Я не нашел его, но нашел метод магии __call, который будет иметь proxy to another object с $this->connection().

    Глядя на метод connection, я могу видеть из блока PHPdoc этого метода, что он возвращает \Illuminate\Database\Connection, который является именем класса PSR-4 (снова). Он также находится в том же пространстве имен, что и на DatabaseManager, на который я смотрю. Я открыл this file и нашел метод, который вы ищете.

Это может показаться немного усилий, чтобы найти, если фасад все еще обеспечивает доступ к методу, но используя хороший IDE (PhpStorm в моем случае), и зная основы о нем (который я надеюсь, описанные здесь) означает, что вы можете смотреть эти вещи менее чем за минуту.

Одним из основных преимуществ Laravel 5 (и PSR-4) является то, что все имена классов и пространства имен должны напоминать файловую систему, поэтому все должно быть довольно интуитивно понятным.

+0

'use \ DB as DB' был для меня ключом. Благодаря! – sterfry68

Смежные вопросы