* Обратите внимание, что это вопрос относительно Laravel 4, а не Laravel 3 (который использует Fluent)Laravel 4 - Можно ли расширить класс DB?
Можно ли расширить класс DB в Laravel 4?
Я пытался что-то же просто, как это:
class Content extends DB {}
С этим в моем маршруте:
print_r(Content::table('content')->get());
И это, кажется, работает, насколько помощью «Content», как «БД» ,
Но если я пытаюсь установить имя таблицы по умолчанию аналогично тому, как вы бы в Eloqeunt и использовать такие функции, как, где или присоединиться к я получаю сообщение об ошибке, как так:
print_r(Content::where('id', '!=', 4)->get());
С этим как ошибка:
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'where'
Фактически то, что я хотел бы сделать, это что-то вроде этого. В результате я могу добавить функцию, которая выполняет ряд объединений/where, но интегрирует их в обычный поток использования БД. Так что класс будет выглядеть следующим образом:
class Content extends DB {
public $table = 'content';
public static function joinPermissions($permission_mask)
{
return self::where('permissions.mask', '=', $permission_mask)
->where('permissions.read', '=', 1)
->join('permissions', 'id', '=', 'content.permission_set');
}
}
И это будет называться так:
Content::orderBy('time_added')
->take(10)
->joinPermissions($permission_mask)
->get();
Возможно ли это? Я предполагаю, что это связано с необходимостью расширения другого класса, кроме DB, потому что DB возвращает что-то еще, когда вы используете DB :: table() ;. Но я действительно стараюсь следовать коду в Laravel и найти, что происходит, похоже, это что-то делать с освещением, но, честно говоря, я не совсем уверен, что это такое. Я также попытался взглянуть на «Красноречивый», чтобы посмотреть, как это происходит, но снова я просто нахожу, что Ларавель так трудно оглянуться и понять, что происходит.
Методы, DB (например, «где», «присоединиться», и т.д.) являются частью класса Builder в Осветите \ имен базы данных \ Query, а не класс DB , Что вы пытаетесь сделать точно? Возможно, существует лучший подход, чем расширение классов, которые взаимодействуют с базой данных. Обычно я добавляю «some_extra_function()» к модели, которая использует эту функцию. – ARW
@AdamWathan Я обновил пример, чтобы объяснить немного больше. Я в основном хочу включить функции в общий поток использования БД, вместо того, чтобы писать отдельные функции, такие как getWithPermissions() – robjbrain
Похоже, что класс Builder - это то, что вы хотите расширить, должен иметь возможность добавлять туда те методы. Я не уверен, что полностью понимаю, что вы пытаетесь сделать, поэтому я не могу предложить лучший подход, но я все же думаю, что расширение этого класса с очень специфическим поведением, вероятно, не является лучшим решением. Собираетесь ли вы использовать этот материал с Eloquent, или просто используете компонент DB и делаете что-то немного более «сырым»? Что представляет собой класс «Содержание»? – ARW