这是一个cakephp 3.1查询结果,我希望直接访问$ data-> items,但是我收到一条错误消息,指出未找到关键项目,并且我不希望使用funtcion toArray(),因为如果我这样做了只会返回'items'=> ...,而我丢失了所有'query'=> ...信息。
您能以正确的语法帮助我获得$ data-> items或$ data-> {'items'} ...
。
$data = object(Cake\ORM\ResultSet) {
'query' => object(Cake\ORM\Query) {
'(help)' => 'This is a Query object, to get the results execute or iterate it.',
'sql' => 'SELECT Posts_types.id AS `Posts_types__id`, Posts_types.name AS `Posts_types__name` FROM posts_types Posts_types ORDER BY id ASC',
'params' => [],
'defaultTypes' => [
'Posts_types.id' => 'integer',
'id' => 'integer',
'Posts_types.name' => 'string',
'name' => 'string'
],
'decorators' => (int) 0,
'executed' => true,
'hydrate' => true,
'buffered' => true,
'formatters' => (int) 0,
'mapReducers' => (int) 0,
'contain' => [],
'matching' => [],
'extraOptions' => [],
'repository' => object(Cake\ORM\Table) {
'registryAlias' => 'Posts_types',
'table' => 'posts_types',
'alias' => 'Posts_types',
'entityClass' => '\Cake\ORM\Entity',
'associations' => [],
'behaviors' => [],
'defaultConnection' => 'default',
'connectionName' => 'default'
}
},
'items' => [
(int) 0 => object(Cake\ORM\Entity) {
'id' => (int) 1,
'name' => 'Descriptif de la formation',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Posts_types'
},
(int) 1 => object(Cake\ORM\Entity) {
'id' => (int) 2,
'name' => 'Cours',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Posts_types'
},
(int) 2 => object(Cake\ORM\Entity) {
'id' => (int) 3,
'name' => 'Evénements',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[repository]' => 'Posts_types'
}
]
}
参考方案
没有项目属性
问题中的项目关键字是调用toArray
的结果,这是您所要求的直接答案。
从the result set class和the collection trait使用的公共方法可以很明显地看出,结果集的任何属性都不能直接访问。
这是一个演示如何使用结果集的简单示例:
use Cake\ORM\TableRegistry;
$resultSet = TableRegistry::get('Posts');
// Iterate it
foreach($resultSet as $postObject) {
echo $postObject->title;
}
// Obtain data as an array
$arrayofPostObjects = $resultSet->toArray();
echo get_class($resultSet); // It is still a result set
请注意,在resultSet上调用方法不会更改其内容-它仍然是结果集,不会丢失任何信息。这个问题存在误解,但由于不清楚您在做什么,因此不清楚该误解是什么。
如何获取查询?
您曾在评论中要求:
如果我想获取$ data-> query怎么办?
这是您的应用程序永远都不应做的事情,作为开发人员,您通常只希望在调试过程中这样做。大多数类实现__debugInfo-这是debug/var_dumping a result set object时两个关键字“ query”和“ items”的来源:
/**
* Returns an array that can be used to describe the internal state of this
* object.
*
* @return array
*/
public function __debugInfo()
{
return [
'query' => $this->_query,
'items' => $this->toArray(),
];
}
因此,要获取查询,您唯一需要做的就是debug / var_dump对象。如前所述,这也表明“项目”只是调用toArray
的结果。
请注意,要记录所有查询,请配置query logging,显然所有开发人员都应在开发中使用Debug Kit。
我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
twilio'未知上下文帐户 - php我正在尝试通过Twilio和Php发送一条简单的SMS,但是出现此致命错误, 未捕获的异常“ Twilio \ Exceptions \ TwilioException”,带有消息 的“未知上下文帐户” C:\ xampp \ htdocs \ Twilio \ vendor \ twilio \ sdk \ Twilio \ Rest \ Client.p…
PHP数组可以这样做吗? - php可以说;我有一个$ friends数组,其中有2,000个不同的friendID号+我有一个带有10,000 bulletinID号的$ bulletins数组,该$ bulletins数组还将具有另一个值,该ID的用户ID是发布公告条目的用户现在可以获取所有具有与FriendsID数组中的userID匹配的userID的bulletinID号吗?甚至有可能…
php getdate()-小时不正确 - php我在iframe中将php用于计数器。我正在使用getdate();功能。我的当地时间不是下午12:16,如果我使用getdate();从php获取现在的本地时间,小时显示为13。我从php getdate()回答的值应该不是12吗?$d1=getdate(); $hournew=$d1['hours']; echo $hournew .…
CakePHP将数据传递到元素 - php我的控制器中有以下代码:function index() { $posts = $this->set('posts', $this->Portfolio->find('all')); if (isset($this->params['requested'])) { retur…