私は同じ問題を抱えていたと私はこのような何かを書くことで、それを解決したと考えたリコール:
$repository->findBy(array('is_enabled' => true));
コードを見てみましょう:
<?php
/**
* Adds support for magic finders.
*
* @return array|object The found entity/entities.
* @throws BadMethodCallException If the method called is an invalid find* method
* or no find* method at all and therefore an invalid
* method call.
*/
public function __call($method, $arguments)
{
if (substr($method, 0, 6) == 'findBy') {
$by = substr($method, 6, strlen($method));
$method = 'findBy';
} else if (substr($method, 0, 9) == 'findOneBy') {
$by = substr($method, 9, strlen($method));
$method = 'findOneBy';
} else {
throw new \BadMethodCallException(
"Undefined method '$method'. The method name must start with ".
"either findBy or findOneBy!"
);
}
if (!isset($arguments[0])) {
// we dont even want to allow null at this point, because we cannot (yet) transform it into IS NULL.
throw ORMException::findByRequiresParameter($method.$by);
}
$fieldName = lcfirst(\Doctrine\Common\Util\Inflector::classify($by));
if ($this->_class->hasField($fieldName) || $this->_class->hasAssociation($fieldName)) {
return $this->$method(array($fieldName => $arguments[0]));
} else {
throw ORMException::invalidFindByCall($this->_entityName, $fieldName, $method.$by);
}
}
キーラインはここにある:
$fieldName = lcfirst(\Doctrine\Common\Util\Inflector::classify($by));
今度は、分類する見てみましょう:
<?php
/**
* Convert a word in to the format for a Doctrine class name. Converts 'table_name' to 'TableName'
*
* @param string $word Word to classify
* @return string $word Classified word
*/
public static function classify($word)
{
return str_replace(" ", "", ucwords(strtr($word, "_-", " ")));
}
あなたがしたい場合は、「likeThisを」あなたのフィールドを書くことになっているように見えますこれはうまくいく。
はい私は(回避策として)まったく同じことをやっていますが、私は「魔法」の方が好きです。これはバグですか? – gremo
ドキュメントに例がありますか?私はできません。同様の問題[この他の質問](http://stackoverflow.com/questions/7698874/doctrine2-and-magic-finders-with-more-field-not-working)、おそらく魔法の部分は落胆している。 – greg0ire
はい、Symfonyのドキュメントでは、http://symfony.com/doc/current/book/doctrine.htmlを見てください。 – gremo