Lab / Laravel

Laravel: Создание статических методов в модели

Если вы ранее работали с фреймворками отличными от Ларавела, вы наверняка встречалист с таким случаем, когда нужно выполнить какую-либо логику в модели и передать её далее в ваше приложение, например развернуть строку в массив посредством метода explode(), что бы можно было использовать данные как массив в контроллере или представлении.

Кащалось бы что тут сложного фигачим метод в классе, вызываем данные через $this и вуаля! Не тут то было! В Laravel вы выхватите сообщение типа:

LogicException App\Object::getCover must return a relationship instance

Типа серъёзных отношений с другими моделями ему подавай и точка. Но всё не так безнадёжно, нужно просто правильно именовать ваш метод, что бы смочь использовать его в дальнейшем. Вот пример того как это может быть реализовано, например развернём строку изображений "1.jpg,44,jpg,6.jpg" в массив и получим первое из списка:

...
class Object extends Model
{
...
 public function getCoverAttribute()
 {
 $image = explode(',', $this->image);
 return $image[0];
 }
...
}

Теперь в представлении или контроллере первую картинку из массива можно получить просто вызвав метод вот так $node->cover