Я новичок в Laravel 4, и мне интересно, когда использовать статические методы и когда использовать пользовательские атрибуты. Это может быть философский вопрос, но я хотел бы узнать больше о плюсах и минусах обоих подходов.Laravel 4: Когда использовать статические методы?
Пример 1:
У меня есть следующие отношения: пользователь имеет много коллекций. Теперь, я могу это сделать:
class User extends Eloquent {
....
public function collections() {
return $this->hasMany('Collection')->orderBy('order_nr', 'ASC');
}
}
Поскольку я много работаю с текущим пользователем, который вошли в систему, я хотел бы использовать это как так в контроллере или шаблона:
$collections = Auth::user()->collections()->get();
Однако Я мог бы также взять на себя весь другой маршрут и назвать это через статический метод моего Collection
класса:
class Collection extends Eloquent {
public function scopeOfUser($query, $user_id) {
return $query->where('user_id', '=', $user_id)->orderBy('order_nr', 'ASC');
}
}
Тогда, я хотел бы получить все коллекции пользователя следующим образом:
$collections = Collection::ofUser(Auth::id())->get();
Пример 2:
хранить пользовательские настройки в таблице ключ-значение, называемое UserSettings
. Таким образом, мой пользователь имеет отношение «один ко многим» к UserSetting. Если я хочу, чтобы проверить на некоторые атрибуты, я могу пойти двумя путями снова:
class User extends Eloquent {
public function getHasFullAccountAttribute() {
return $this->hasMany('UserSetting')->whereKey('account_type')->whereValue('full')->count() > 0;
}
}
Вызов функции будет:
Auth::user()->has_full_account;
Другой способ является статическая функция, которая использует БД:
class User extends Eloquent {
public static function hasFullAccount($user_id) {
return DB::table('users')
->join('user_settings', 'users.id', '=', 'user_settings.user_id')
->where('user_settings.key', '=', 'account_type')
->where('user_settings.value', '=', 'full')
->where('users.id', '=', $user_id)
->count() > 0;
}
}
И вызов затем:
User::hasFullAccount(Auth::id());
Итак, я предполагаю, что оба пути являются законными, в обоих случаях дают правильные результаты, но когда вы используете модельный класс статическим способом и когда вы обычно работаете с самим объектом?