Как добавить пользовательское поле для модели в Laravel?

Я очень новичок в фреймворках Laravel и php в целом, так что извините, если я что-то пропустил. Я создал новую модель под названием Journey в моем приложении, которое расширяет стандарт Eloquent модель. Что я заметил, так это то, что я использую свою модель Journey в двух разных контроллерах и из-за этого дублирую немного кода.

По сути, то, что я делаю, это то, что я беру заголовок Journey и форматирую его с помощью пользовательского класса, чтобы очистить заголовок (преобразовать в нижний регистр, добавить дефисы, удалить пробелы и т. Д.), Чтобы я мог добавить его к URL моей страницы.

В один контроллер я звоню:

$journey = Journey::find($id);
$journey->cleanURL = Url::clean($journey['name']); // This creates a new element/property with a clean string

А в другом я звоню

$journeys = Journey::all();
foreach ($journeys as $journey) {
$journey->cleanURL = URL::clean($journey['name']);
}

Было бы неуместно добавлять в мою базу данных фиксированное поле с очищенным URL-адресом, потому что я могу изменить заголовок (на котором основан очищенный URL-адрес) в любое время, и я бы хотел, чтобы URL-адрес автоматически обновлялся в этом случае. Однако, сказав это, я повторяюсь, позвонив Url::clean дважды.

То, что я хотел бы сделать, это написать метод или изменить существующий метод, чтобы при вызове Journey::all() или же Journey::find() или любой метод на основе запроса, поле URL уже присутствует и заполнено. Я пытался просмотреть некоторые из Vendor/Eloquent файлы, но они просто смущают меня.

Как бы я поступил так?

0

Решение

Ты можешь использовать сбруя за это.

Добавьте к вашему Journey смоделируйте следующую функцию:

public function getCleanUrlAttribute($value)
{
return Url::clean($this->name);
}

Теперь вы сможете использовать:

$journey = Journey::find($id);
echo $journey->clean_url;
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector