Есть две модельки, условно:
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;
}
}
В целом все работает, но каждый раз когда нужно чтобы такой функционал работает, приходиться вызывать этот метод в контроллере.
Как сделать так, чтобы каждый раз когда я просто делаю обращение к одной или нескольким сущностям этой модельки, автоматически вызывался этот метод?
Ну или может есть какой-то другой способ удобно работать с такими связями?)