Craft CMS - Как включить поля ресурсов в запрос ввода PHP? - PullRequest
0 голосов
/ 27 ноября 2018

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

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

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

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

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

Возвращает: enter image description here

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

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

Возвращает: enter image description here

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

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

Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Вот что я закончил:

    $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);
...