MongoDBException:通过调用

时间:2017-01-04 14:28:46

标签: php mongodb symfony php-5.6

我有一个MongoDBException:

  

"通过调用Bundle \ Document \ Property :: $ fieldName查找无效   (criteriaWith)"

我不明白这里有什么问题。有人能帮帮我吗?

这里是堆栈跟踪

1。在vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/MongoDBException.php第38行

public static function invalidFindByCall($documentName, $fieldName, $method) {
    return new self(sprintf('Invalid find by call %s::$fieldName (%s)', $documentName, $fieldName, $method));
}
  1. at
  2.   

    MongoDBException :: invalidFindByCall(' \ Bundle \ Document \ Property',   ' criteriawith',' findByCriteriaWith')

    vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentRepository.php第222行

    if ($this->class->hasField($fieldName)) {
        return $this->$method(array($fieldName => $arguments[0]));
    } else {
        throw MongoDBException::invalidFindByCall($this->documentName, $fieldName, $method . $by);
    }
    
    1. DocumentRepository ->__call ('findByCriteriaWith', array(array('name' => 'ho'))) src/Bundle/Controller/PropertyController.php第286行

      else {
           criteria['name'] = $name;
           $entities = $repository->findByCriteriaWith($criteria);
      }
      
    2. 日志消息:

        

      CRITICAL请求未捕获的PHP异常   Doctrine \ ODM \ MongoDB \ MongoDBException:"无效的逐个调用   Bundle \ Document \ Property :: $ fieldName(criteriaWith)"在   供应商/教义/ mongodb的-ODM / LIB /学说/ ODM / MongoDB的/ MongoDBException.php   第38行语境:{"例外":   "对象(学说\ ODM \ MongoDB的\ MongoDBException)" }

1 个答案:

答案 0 :(得分:0)

让我们浏览ODM的文档存储库magic __call method(因为findByCriteriaWith之后所谓的内容不存在)并突出显示有趣的部分。

首先我们看到

 if (strpos($method, 'findBy') === 0) {
     $by = substr($method, 6, strlen($method));
     $method = 'findBy';
 }

您的方法名称以" findBy"开头。因此,我们将在$method = 'findBy'$by = 'CriteriaWith'之后输入此块,稍后$by获得驼峰作为字段/属性名称的标准,并留给我们$fieldName = 'criteriaWith' 1}}。接下来我们看到的是$this->class->hasField($fieldName)检查哪个会导致您遇到异常,因为您的类没有criteriaWith字段。

总结$repository->findBySomething($value);相当于$repository->findBy(['something' => $value]),如果您的文档中不存在字段,则会抛出异常。