Php 如何使ResultSet成为集合的实例?
我有这个QueryService功能: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'
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;
}
}