Laravel 5.4 как модифицировать объект Eloquent при выполнении запроса?
Есть модели User и Field, связь hasMany ( у юзера может быть много field )
У Field есть поля Name и Value ( например, first_name и Вася )
Нужно сделать так, чтобы при всех запросах из базы возвращался объект User с добавленными свойствами из Field
В данном случае, должно появится свойство $user->first_name ( или $user->fields->first_name, не принципиально )
Если делать запрос users()->with('fields')->get(), то у юзера появляется свойство fields, но в нём простой массив, а мне это не подходит, нужен хотя бы ассоциативный c ключами по Name
Мне это вернуть нужно в виде json. Сейчас получается fields[ 0 => [ 'name' => 'first_name', value => 'Иван' ], 1 => [ 'name' => 'last_name', 'value' => 'Иванов'] ]
А нужно fields[ 'first_name' => 'Иван', 'last_name' => 'Иванов' ]
fiter: Как насчет мутаторов? Я в проекте у себя сделал так(без отношений, но думаю будет понятно):
в моделе добавил: protected $appends = ['avatar_path'];
и
public function getAvatarPathAttribute() {
$this->avatar = $this->avatar ?: 'default.png';
return Storage::disk('local')->url("avatar/" . $this->avatar);
}
В итоге в моделе Artist появился новый метод "avatar_path".
Почитайте про мутаторы, вроде это то, что вы хотели - подобие промежуточной обработки. Еще есть сериализатор, тоже похоже понадобится.