Php mongodb返回对象和数组分开
我使用phalcon框架和mongo db。 我向你展示两种不同的方式。第一个返回的不是正确的结果,而是第二个返回正确的结果(他使用默认的php扩展名) 为什么我会得到不同的结果?如何解析它 phalcon中的样品(方式1): 结果(方式1): 当我尝试使用默认扩展时(方式2): 更新:Php mongodb返回对象和数组分开,php,mongodb,return,phalcon,Php,Mongodb,Return,Phalcon,我使用phalcon框架和mongo db。 我向你展示两种不同的方式。第一个返回的不是正确的结果,而是第二个返回正确的结果(他使用默认的php扩展名) 为什么我会得到不同的结果?如何解析它 phalcon中的样品(方式1): 结果(方式1): 当我尝试使用默认扩展时(方式2): 更新: $documents = new AdminModel(); $cursor = $documents->find(array( 'login' => 'hello' )); foreac
$documents = new AdminModel();
$cursor = $documents->find(array(
'login' => 'hello'
));
foreach($cursor as $model){
var_dump($model->user);
echo $model->user['login'];
echo $model->user['password'];
echo $model->user['role'];
}
$model = $documents->findFirst(array(
'login' => 'hello'
));
var_dump($model->user);
echo $model->user['login'];
echo $model->user['password'];
echo $model->user['role'];
然后我们得到通知。你什么意思,为什么???你使用两个完全不同的东西,因此你得到两个完全不同的结果。Mongo客户端按原样返回JSON文档。Phalcon使用Mongo客户端(可能不是同一个)检索这些文档,并将它们映射到您的模型,以便更方便地使用。因此,
AdminModel::find
在内部调用Collection::find
,然后以自己的格式存储结果,这是在转储var时看到的
看,它更多地讨论了实现以及如何使用它
编辑:
您实际上不需要解析它,因为模型应该为您这样做。要访问您的数据,您可以执行以下操作
PS:在第一个示例中,您也有一个嵌套循环,否则(我假设)它将显示一个具有
id
和user
属性的对象。您是认真的吗?我阅读了这个文档,这里展示了如何在没有子文档的情况下使用。我得到2个元素,第一个是对象,第二个是数组。如果我要通过foreach解析,我将被迫使用If运算符,并验证每个对象/数组。我认为这是一种糟糕的方式。你的问题是“为什么我得到不同的结果?”你得到了答案。如果您的问题是“如何解析它?”那么可以更好地表述它并更新帖子。foreach($cursor as$model){var_dump($model->user);}是否打印该用户数组,或者它是否也抛出异常?在我更新帖子之前,它会生成什么通知,因为我们不必尝试访问对象(MongoID)。
class AdminModel extends \Phalcon\Mvc\Collection{
public function getSource()
{
return "accounts";
}
}
object(MongoId)#70 (1) {
["$id"]=>
string(24) "540822d55d34c4087a320064"
}
array(3) {
["login"]=>
string(3) "one"
["password"]=>
string(60) "$2y$10$RB2PvyRWxD7kdZcYpb8BGO6E/2ftbAEwnJ/28TBWUaDmX.iesPqY2"
["role"]=>
string(4) "user"
}
$mongo = new \MongoClient();
$db = $mongo->weather;
$collection = $db->accounts;
$cursor = $collection->find();
echo "<pre>";
foreach($cursor as $doc){
var_dump($doc);echo "1<br/>";
}
echo "</pre>";
array(2) {
["_id"]=>
object(MongoId)#72 (1) {
["$id"]=>
string(24) "540822d55d34c4087a320064"
}
["user"]=>
array(3) {
["login"]=>
string(3) "one"
["password"]=>
string(60) "$2y$10$RB2PvyRWxD7kdZcYpb8BGO6E/2ftbAEwnJ/28TBWUaDmX.iesPqY2"
["role"]=>
string(4) "user"
}
}
foreach($cursor as $model){
echo $model->user['login']."<br/>";
echo $model->user['password']."<br/>";
echo $model->user['role']."<br/>";
}
object(MongoId)#70 (1) {
["$id"]=>
string(24) "540822d55d34c4087a320064"
}
$documents = new AdminModel();
$cursor = $documents->find(array(
'login' => 'hello'
));
foreach($cursor as $model){
var_dump($model->user);
echo $model->user['login'];
echo $model->user['password'];
echo $model->user['role'];
}
$model = $documents->findFirst(array(
'login' => 'hello'
));
var_dump($model->user);
echo $model->user['login'];
echo $model->user['password'];
echo $model->user['role'];