我有这个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成为集合?
答案 0 :(得分:1)
如果您想要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()
,请找到它Selecting Rows From A Table
我不认为select
可以直接转换为集合对象。但是,您可以采取其他黑客方式来实现您的目标。您可以在返回时将类型转换为对象。像
(object) $array;
如果要执行此操作,请删除all()
并键入强制转换并将其返回。
如果您的数组是多维数组,我是在Richard Castera
中找到的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;
}
}
希望获得帮助
答案 1 :(得分:1)
如果该方法驻留在表类中,则应重新考虑其名称,因为以find
开头的表类方法可以用作finders,并且查找器必须返回查询对象。
也就是说,如果您确实希望该方法公开与集合兼容的返回值,则将返回类型声明为\Cake\Collection\CollectionInterface
,而\Cake\ORM\ResultSet
是通过\Cake\Datasource\ResultSetInterface
间接实现的。