如何在symfony中使用带下划线(_)的关于字段名称的存储库方法findByxx

时间:2018-12-26 17:20:19

标签: symfony doctrine

// This is my entity class object
use Doctrine\ORM\Mapping as ORM;
class PayOrder {
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\Column(type="string",unique=true)
     */
    private $pay_no;
};
// I use it in my function, this is the Repository
use Doctrine\ORM\EntityManager;
use Exception;
use Psr\Container\ContainerInterface;
use Doctrine\ORM\Mapping;
class PayOrderRepository extends \Doctrine\ORM\EntityRepository {
    public function get( PayOrder $payOrder ) {
        $pay_no=$payOrder->getPayNo();
        // It will occurs a exception, how to fix it, any one can help me?
        return $this->findBypayno($pay_no);
    }
};

除此之外,我找不到解决该问题的文档。  我想使用字段名pay_no,并且我想使用存储库 findbyxxx,但是我不能正确使用它。

2 个答案:

答案 0 :(得分:2)

将您的媒体资源名称更改为$payNo

在您的实体中大概是这样;

//...

/**
 * @ORM\Column(type="string", length=255)
 */
$pay_no

//....

那样修改它;

//...

/**
 * @ORM\Column(name="pay_no", type="string", length=255)
 */
$payNo

//....

之后,

  1. 删除$pay_no的旧的getter / setter
  2. 对于Symfony2,运行app/console doctrine:generate:entities
  3. 对于Symfony4,运行bin/console make:entity --regenerate

祝你好运。如果您有任何疑问或阻碍,请写信给我。

答案 1 :(得分:0)

或者只是使用

$this->findBy(['pay_no' => $payOrder->getPayNo());

findByX方法只是拦截的方法调用-请参阅line up 177 to 179转换为findBy调用。