Craft CMS - Как включить поля ресурсов в запрос ввода PHP?

Я пытаюсь выяснить, как вернуть поле (поля) активов в запросе на вход PHP. Кроме того, если бы я мог узнать, как возвращать «настраиваемые поля» при возврате объекта, это тоже было бы здорово! Прямо сейчас мне нужно указать asArray(), чтобы даже получить доступ к большинству моих «настраиваемых полей».

В качестве примера: у меня есть запись о транспортном средстве, в которой есть настраиваемое поле с дескриптором цены (поле номера) и другое настраиваемое поле (поле актива) с дескриптором изображений. Когда я выполняю запрос без указания параметра asArray(), я не могу найти настраиваемые поля, включенные в результаты. Но если я укажу asArray(), то все они будут там, за исключением поля моих изображений, которое, я думаю, потому что это поле актива или возможно, потому что это может быть коллекция изображений? Как я могу убедиться, что все поля, связанные с записью, возвращаются в моем запросе?

Вот несколько примеров запросов и соответствующих результатов:

PHP-запрос без asArray():

$entry_query = Entry::find()
->section('inventory')
->all();

Возвращает: введите здесь описание изображения

Результаты PHP-запроса с asArray():

$entry_query = Entry::find()
->section('inventory')
->asArray();

Возвращает: введите здесь описание изображения

Однако даже при указании сделать результирующий набор массивом я все еще не могу понять, как включить поле «изображения».

Мне трудно найти ответ через документацию или пример того, как кто-то делает то же самое. Все примеры, которые я нахожу, относятся к стороне шаблона в twig.

Спасибо!


person Radmation    schedule 27.11.2018    source источник


Ответы (2)


Вот что у меня получилось:

    $vehicles = array(); // empty container to hold our modified entries
    // Lets Query our Inventory - all of it
    /** @var array $entry_query   the name of our query to get our inventory - return a list of inventory after we execute query */
    $entries = Entry::find()
        ->section('inventory')
        ->all();

    foreach($entries as $entry) {
        /*
         * Let's get all our custom fields we want
         * to include with our entries
         */
        // Get our image field and add to result set - because it's an asset field this returns a query object
        $ourimages = $entry->images->all(); // get all our images
        $price = $entry->price;
        $featured = $entry->featureThisVehicle;
        $make = $entry->make;
        $model = $entry->model;
        $year = $entry->year;
        $description = $entry->description;
        $inventoryStatus = $entry->inventoryStatus;
        $bodyStyle = $entry->bodyStyle;
        $color = $entry->color;
        $miles = $entry->miles;
        $vin = $entry->vin;
        $stkid = $entry->stkid;

        // cast out entry object as an array - so we can add props to it
        $entry = (array)$entry;

        // add our custom fields to our newly casted entry array
        $entry['images'] = $ourimages;
        $entry['price'] = $price;
        $entry['featured'] = $featured;
        $entry['make'] = $make;
        $entry['model'] = $model;
        $entry['year'] = $year;
        $entry['description'] = $description;
        $entry['inventoryStatus'] = $inventoryStatus;
        $entry['bodyStyle'] = $bodyStyle;
        $entry['color'] = $color;
        $entry['miles'] = $miles;
        $entry['vin'] = $vin;
        $entry['stkid'] = $stkid;

        // Recast back to object just cause (not really necessary since we are json_encode'ing this)
        $entry = (object)$entry;
        array_push($vehicles, $entry);
    }

    return json_encode($vehicles);
person Radmation    schedule 27.11.2018

В Yii есть вспомогательная функция массива, которая упрощает это. См. эту запись обмена стека — по сути, тот же подход, что и описанный вами, но проще (меньше запросов, меньше строк кода).

person oolong32    schedule 16.11.2020
comment
Это комментарий только для ссылки. Нужны ТАК руководящие принципы ответа или они должны быть автономными, включая основные окупаемости связанной страницы. Если ссылка станет недоступной или изменится ее содержание, эта А станет бесполезной, а качество ТАК пострадает. Кроме того, никто не хочет бродить по сети, задаваясь вопросом, где находится настоящий ответ. Ссылки ОТЛИЧНЫ для поиска исходного материала и указания авторства, а также для пересылки дополнительной информации. Но не КАК ответ. Это просто сбор ссылок. Тем не менее, это приветствуется, и совершенно нормально размещать предложения, подобные этому, в комментариях к сообщению. - person SherylHohman; 16.11.2020