0

我试图弄清楚如何在 PHP 条目查询中返回资产字段。另外,如果我可以在返回对象时学习如何返回“自定义字段”,那也很棒!现在我必须指定 asArray() 才能访问我的大部分“自定义字段”

例如:我有一个车辆条目,它有一个带有价格句柄的自定义字段(数字字段)和另一个带有图像句柄的自定义字段(资产字段)。当我在不指定 asArray() 参数的情况下执行查询时,我找不到结果中包含的自定义字段。但是如果我指定 asArray() 那么它们都在那里,除了我的 images 字段,我认为这是因为它是一个资产字段,或者可能是因为它可以是图像的集合?如何确保在我的查询中返回与条目相关的所有字段?

以下是一些查询示例和相应的结果:

没有 asArray() 的PHP 查询:

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

回报: 在此处输入图像描述

使用 asArray() 的PHP 查询结果:

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

回报: 在此处输入图像描述

但是,即使指定将结果集设为数组,我仍然无法弄清楚如何包含“图像”字段。

我很难通过文档或有人这样做的示例找到答案。我找到的所有示例都是针对 twig 中的模板端的。

谢谢!

4

2 回答 2

0

这就是我最终的结果:

    $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);
于 2018-11-27T22:37:40.087 回答
0

Yii 有一个数组辅助函数可以简化这一点。请参阅此堆栈交换条目- 它与您描述的方法基本相同,但更简单(更少的查询,更少的代码行)。

于 2020-11-16T14:25:34.360 回答