Преобразовать строку в Eloquent функции - PullRequest
1 голос
/ 14 марта 2020

Я создаю API с laravel, поэтому я пытаюсь передать Eloquent функции Laravel в виде строки и выполнить их в контроллере, фактически я отправляю объект JSON, но я преобразовываю его в строка в бэкенде, вот что я пытался сделать

URL API с параметрами: http://www.example.com/api/articles?parameters= {"orderByDes c": "'creation_at'", "limit": "2"}

Сторона контроллера:

$json = json_decode(request('parameters'), TRUE);

$query = '';

foreach ($json as $function => $value){

    $query .= $function.'('.$value.')->';

}

$query = $query.'get();';

return $query;

Вывод:

orderByDesc('created_at')->limit(2)->get();

Теперь, как я могу выполнить эту строку как код в модели, пример:

$articles = Article::orderByDesc('created_at')->limit(2)->get();

Я не могу объединить так: Article ::. $ Query И я не могу использовать PHP s eval ()

Идея состоит в том, чтобы использовать функции Eloquent Laravel внутри объекта JSON и передавать их в одном параметре URL.

Спасибо

1 Ответ

0 голосов
/ 14 марта 2020

Возможно, вам стоит попробовать это.

$json = json_decode(request('parameters'), true);

$query = Article::query();

foreach($json as $function => $value){
    $query->{$function}($value);
}

$query = $query->get();

return $query;

Вы можете запустить функцию на объекте с ->{$func_name} синтаксисом

Редактировать: Вы можете передать несколько аргументы тоже. Но вы можете проверить, является ли значение массивом:

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