Загрузить красноречивый атрибут Laravel по строке - PullRequest
1 голос
/ 18 июня 2019

Я храню некоторые строки в своей базе данных, и я хочу иметь возможность получать атрибуты модели, используя их.

В принципе, я могу позвонить пользователям, бронирующим подобное:

$user->bookings->date

в моем контроллере, и он работает, и я храню строку в моей базе данных, как это

'user->bookings->date'

Как я могу использовать эту строку из базы данных, чтобы получить атрибут?Я надеюсь, что смогу сделать что-то вроде

$user = User::findOrFail(1);
$string = 'user->bookings->date'; //This is fetched from the db normally
$booking_date = ${$string}; //Instead of writing $user->bookings->date

Возможно ли это?

1 Ответ

1 голос
/ 18 июня 2019

Я нашел решение, которое включает в себя цепочку доступа к объекту из статической строки:

$user = User::findOrFail(1);

$string = "user->bookings->date";
$params = explode("->", $string);

$var = null;
foreach($params AS $param){
    if($var){
        $var = $var->{$param};
    } else {
        $var = ${$param};
    }
}

dd($var);

На первой итерации $params установите $var на значение ${$param} ($user). Затем на следующих итерациях установите $var в значение $var->{$param} ($user->bookings, $user->bookings->date). Затем, наконец, выведите (или dd()) значение $var. В моем тесте это приводит к

"2019-06-18 12:06:00"

Так что, хотя это требует немного дополнительной логики, можно установить доступ к объектам из строки базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...