我使用phalcon框架和mongo db。 我向您展示了两种不同的方式。首先返回不正确的结果,但第二种方式返回正确的结果(他使用默认的php扩展名)。
为什么我会得到不同的结果?怎么解析呢?
phalcon中的样本(方式1):
$documents = new AdminModel();
$cursor = $documents->find(array(
'login' => 'hello'
));
echo "<pre>";
foreach($cursor as $doc){
foreach($doc as $prop){
var_dump($prop);
}
}
echo "</pre>";
如何查看AdminModel(方式1):
class AdminModel extends \Phalcon\Mvc\Collection{
public function getSource()
{
return "accounts";
}
}
结果(方式1):
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"
}
当我尝试使用默认扩展名(方式2)时:
$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>";
结果(方式2):
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/>";
}
2个
$ 2Y $ 10 $ RB2PvyRWxD7kdZcYpb8BGO6E / 2ftbAEwnJ / 28TBWUaDmX.iesPqY2
管理员
3个
$ 2Y $ 10 $ RB2PvyRWxD7kdZcYpb8BGO6E / 2ftbAEwnJ / 28TBWUaDmX.iesPqY2
客人
注意:未定义的属性:第19行的/Users/rd/sites/app/controllers/Admin/IndexController.php中的Weather \ Model \ AdminModel :: $ user
注意:第20行的/Users/rd/sites/app/controllers/Admin/IndexController.php中未定义的属性:Weather \ Model \ AdminModel :: $ user
注意:未定义的属性:第21行的/Users/rd/sites/app/controllers/Admin/IndexController.php中的Weather \ Model \ AdminModel :: $ user
我告诉了,什么找到返回1个对象和1个数组。我们看到,$ model尝试访问:
object(MongoId)#70 (1) {
["$id"]=>
string(24) "540822d55d34c4087a320064"
}
然后我们得到通知。
答案 0 :(得分:0)
你是什么意思???你使用两个完全不同的东西,因此你得到两个完全不同的结果。 Mongo客户端按原样返回您的JSON文档。 Phalcon使用Mongo客户端(可能不是同一个)来检索这些文档并将它们映射到您的模型以便更方便地使用。因此,AdminModel::find
在内部调用Collection::find
,然后将结果存储为自己的格式,在转储var时会看到。
请参阅ODM (Object-Document Mapper) documentation,它详细介绍了实施以及如何使用它。
修改强>
你真的不需要解析它,因为模型应该为你做这个。要访问您的数据,您可以执行以下操作。
$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'];
PS:你在第一个例子中也有一个嵌套循环,否则(我假设)它会显示一个具有id
和user
属性的对象。