我有一个tryng命令来访问存储库方法。但是我不能成功。
services.yml
app.command.app_checkOfferDemand:
class: AppRefactoredBundle\Command\CheckOfferAndDemand
arguments: ['@doctrine.orm.entity_manager']
tags:
- { name: console.command }
app_OfferRepository
class app_OfferRepository extends \Doctrine\ORM\EntityRepository
{
private function checkAndUpdate(){
$em = $this->getContainer()->get('doctrine')->getManager();
$qb = $em->createQueryBuilder();
$q = $qb->update('app_Offer', 'o')
->set('o.status_id', 2)
->where('o.createdAt < DATE_SUB(NOW(), INTERVAL 2 HOUR)')
->getQuery();
return $q->execute();
}
}
CheckOfferAndDemand
class CheckOfferAndDemand extends Command{
private $em;
public function __construct(EntityManager $em)
{
parent::__construct();
$this->em=$em;
}
protected function configure()
{
// On set le nom de la commande
$this->setName('app:check_OfferDemand');
// On set la description
$this->setDescription("Permet de controler le timeout des offres et demandes");
// On set l'aide
$this->setHelp("Cette commande ne prend pas d'argument et travailler sur toutes les offres et demandes");
}
public function execute(InputInterface $input, OutputInterface $output){
$output->writeln("update des offres");
$this->em->getRepository('AppRefactoredBundle:app_Offer')->checkAndUpdate();
$output->writeln("update des demandes");
$this->em->getRepository('AppRefactoredBundle:app_Demand')->checkAndUpdate();
$this->em->flush();
$output->writeln("DONE");
}
}
该命令本身正在起作用(已进行第一次更新打印)。 但是随后会触发错误
未定义的方法'checkAndUpdate'。方法名称必须以findBy,findOneBy或countBy开头!
这些实体似乎也被很好地声明了
/**
* app_Offer
*
* @ORM\Table(name="app__offer")
* @ORM\Entity(repositoryClass="AppRefactoredBundle\Repository\app_OfferRepository")
*/
class app_Offer
感谢您的帮助。
答案 0 :(得分:1)
无法访问您的存储库方法,因为它表示为private
。
更改
private function checkAndUpdate() {
到
public function checkAndUpdate() {