Выберите конкретные поля из CraftCMS Yii SQL - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь извлечь теги из базовой базы данных craft и использовать ее в качестве конечной точки REST - однако меня интересует только представление идентификатора и заголовка тега, поэтому мои данные должны выглядеть следующим образом:

{id: 1, title: "hello"}, {id: 2, title: "test"}

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

$tags = \craft\elements\Tag::find()->all();

Проблема в том, что он возвращает все поля, которые имеет тег. Затем мне нужно отфильтровать два поля, которые я хочу, выполнив:

foreach($tags as $tag) {
   $out = [];
   $out['id'] = $tag['id'];
   $out['title'] = $tag['title'];
   return $out;
}

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

Вместо этого я хотел бы только получить эти два поля из craft в моем запросе.

Я нашел два возможных способа сделать это - один из них использует метод select:

Что-то вроде

$tags = \craft\elements\Tag::find()->select(['id', 'title']).all();

Проблема с приведенным выше кодом заключается в том, чтоSQL-запрос, который выполняется выше, на самом деле не имеет полей с именами id и title из-за псевдонимов и объединений, выполняемых в нескольких таблицах - поэтому я должен был бы точно знать, какие поля я хочу и в какихтаблицы в схеме SQL они сидят ... это не хорошо масштабируется для более сложных запросов.

Я также нашел https://www.yiiframework.com/doc/api/2.0/yii-base-arrayable#fields()-detail, который, кажется, мог бы быть полезным, но я не смог заставить это работать вообще, и документация не слишком полезна.

...