Php 如何使ResultSet成为集合的实例?

Php 如何使ResultSet成为集合的实例?,php,cakephp,cakephp-3.x,Php,Cakephp,Cakephp 3.x,我有这个QueryService功能: public static function findAllOrderStatus(): Collection { $orders = TableRegistry::get('b2c_orders'); $query = $orders->find(); return $query->select([ 'shop_code' => 'm.mall_code', 'order_id'

我有这个QueryService功能:

public static function findAllOrderStatus(): Collection
{
    $orders = TableRegistry::get('b2c_orders');
    $query = $orders->find();

    return $query->select([
        'shop_code' => 'm.mall_code',
        'order_id' => 'b2c_order_number',
        'ship_status' => 'status',
    ])
        ->join([
            'table' => 'malls',
            'alias' => 'm',
            'type' => 'INNER',
            'conditions' => 'b2c_orders.mall_uuid = m.mall_uuid',
        ])
        ->where([
            'm.mall_code' => MALL_ALPEN_OWN
        ])
        ->all();
}
我犯了一个错误

Exception: Return value of findAllOrderStatus() must be an instance of Cake\Collection\Collection, instance of Cake\ORM\ResultSet returned

如何使$query->select成为一个集合?

如果您想要
Cake\ORM\ResultSet
的实例,可以采用其他方法。你为什么不用下面的方法呢

 $iteratorObject = $orders->find() 
     ->join([
        'table' => 'malls',
        'alias' => 'm',
        'type' => 'INNER',
        'conditions' => 'b2c_orders.mall_uuid = m.mall_uuid',
    ])
    ->where([
        'm.mall_code' => MALL_ALPEN_OWN
    ]); 
如果要使用
all()
toList()
,请找到它

我不认为,
select
可以直接转换为集合对象。但是,您可以通过其他黑客方式来实现您的目标。可以在返回数组时将其类型转换为对象。差不多

(object) $array;
如果要执行此操作,请删除
all()
,然后键入cast并返回它

如果你的数组是多维数组,我在


如果方法位于表类中,您应该重新考虑它的名称,因为以
find
开头的表类方法可以用作,并且查找程序必须返回查询对象

也就是说,如果您确实希望该方法公开与集合兼容的返回值,那么将返回类型声明为
\Cake\collection\CollectionInterface
\Cake\ORM\ResultSet
是通过
\Cake\Datasource\resultsterface
间接实现的


另请参见

我想通过收集,而不是结果来完成。抱歉,我没有清楚地阅读您的问题。让我再看看again@JohnDaleOcayaAndilDale你能再检查一下吗?我明白了,我会试试这个。这会给出错误,“返回了stdClass实例”
function arrayToObject($array) {
    if (!is_array($array)) return $array;

    $object = new stdClass();
    if (is_array($array) && count($array) > 0) {
        foreach ($array as $name=>$value) {
            $name = strtolower(trim($name));
            if (!empty($name)) $object->$name = arrayToObject($value);
        }
        return $object;
     }else {
        return false;
     }
}