Ссылка на свойство объекта с помощью переменной

Мне нужно ссылаться на свойство объекта с переменной, как это:

$user = User::find( 1 );
$mobile = $user->getData( 'phone.mobile' );

Значением свойства $ data в объекте является массив jSON. Прямо сейчас мой пользовательский класс выглядит так:

class User extends Authenticable {

protected $fillable = [
'email',
'password',
'data',
'token',
];

protected $casts = [
'data' => 'array',
];

public function getData( $key = null ){
if( $key == null ){
// Return the entire data array if no key given
return $this->data;
}
else{
$arr_string = 'data';
$arr_key = explode( '.', $key );
foreach( $arr_key as $i => $index ){
$arr_string = $arr_string . "['" . $index . "']";
}
if( isset( $this->$arr_string ) ){
return $this->$arr_string;
}
}
return '';
}
}

Код выше всегда возвращает », но $this->data['phone']['mobile'] возвращает фактическое значение, хранящееся в базе данных.
Я думаю, что я ссылаюсь на ключ неправильно, может кто-то указать мне правильный путь для доступа к значению, учитывая строку 'phone.mobile'

3

Решение

Laravel на самом деле имеет встроенную вспомогательную функцию для того, что вы пытаетесь сделать, под названием array_get:

  public function getData( $key = null )
{
if ($key === null) {
return $this->data;
}
return array_get($this->data, $key);
}

Смотрите документацию для получения дополнительной информации: https://laravel.com/docs/5.5/helpers#method-array-get

2

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

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

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