filnor
@filnor
¯\_( ツ)_/¯

Как правильно конвертировать внешнюю связь в аттрибут модели при получении?

Есть две модельки, условно:

Page, которая состоит из пары полей типо:
id | slug | locale | status | created_at | updated_at

PageValue, которая состоит из
id | page_id | option_id | name | value

Например:
POST: {
    "id": 1,
    "slug": "test_slug",
    "status": 1,
    "created_at": "2022-02-04 02:51:44",
    "updated_at": "2022-02-04 02:51:44",
}

POST_VALUE: {
   "id":1,
   "page_id":1,
   "option_id":1,
   "name":"title",
   "value":"test page",
   "created_at":"2022-02-04 02:51:44",
   "updated_at":"2022-02-04 02:51:44"
}


Обычно все запросы идут с ->with("values") через relations, и для удобства использования, хочу сделать метод, который будет по нейму конвертировать эту связь в обычный аттрибут модельки, чтобы можно его было получить через $page->title, где title это нейм который присутствует в POST_VALUE.

Накидал вот такой метод:
public function valuesToAttributes()
{
    $options = getPageOptions(); # Кешированые опции, чтобы не делать доп запрос
    foreach( $this->values as $attr ){
        $option = $options->where('id', $attr->option_id )->first();
        if( empty( $option ) ){
            return null;
        }
        $this[ $option->name ] = $attr->value;
    }
}


В целом все работает, но каждый раз когда нужно чтобы такой функционал работает, приходиться вызывать этот метод в контроллере.
Как сделать так, чтобы каждый раз когда я просто делаю обращение к одной или нескольким сущностям этой модельки, автоматически вызывался этот метод?
Ну или может есть какой-то другой способ удобно работать с такими связями?)
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lil_koi
лучший из худших
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы