Php mongodb返回对象和数组分开

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

我使用phalcon框架和mongo db。 我向你展示两种不同的方式。第一个返回的不是正确的结果,而是第二个返回正确的结果(他使用默认的php扩展名)

为什么我会得到不同的结果?如何解析它

phalcon中的样品(方式1):

结果(方式1):

当我尝试使用默认扩展时(方式2):

更新:

$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'];