Я немного смущен, как я должен добавлять методы к червячным моделям. Вот код в мой контроллер:Добавление методов к Eloquent Model в Laravel
public function show($id)
{
$limit = Input::get('limit', false);
try {
if ($this->isExpand('posts')) {
$user = User::with(['posts' => function($query) {
$query->active()->ordered();
}])->findByIdOrUsernameOrFail($id);
} else {
$user = User::findByIdOrUsernameOrFail($id);
}
$userTransformed = $this->userTransformer->transform($user);
} catch (ModelNotFoundException $e) {
return $this->respondNotFound('User does not exist');
}
return $this->respond([
'item' => $userTransformed
]);
}
И код в User
модели:
public static function findByIdOrUsernameOrFail($id, $columns = array('*')) {
if (is_int($id)) return static::findOrFail($id, $columns);
if (! is_null($user = static::whereUsername($id)->first($columns))) {
return $user;
}
throw new ModelNotFoundException;
}
Так, по существу я пытаюсь разрешить пользователю быть получены либо user_id
или username
. Я хочу сохранить мощность findOrFail()
, создав свой собственный метод, который проверяет $id
на int
или string
.
Когда я получаю только User
, он работает без проблем. Когда я расширить posts
тогда я получаю ошибку:
Call to undefined method Illuminate\Database\Query\Builder::findByIdOrUsernameOrFail()
Я не знаю, как я бы идти о приближении к этой проблеме.
вы пытались вызвать метод как этот '$ пользователя -> findByIdOrUsernameOrFail ($ ID)'? – mdamia