简体   繁体   中英

How to effectively pass data from my controller to repository, Symfony

I'm working on a Symfony project that makes use of a

Repository file in which I have declared and created an instance of a query builder

(repository1)

$mk = $this->createQueryBuilder('up');

        $later = date("Y-m-d", strtotime("-3 months"));
        $today = date("Y-m-d");
        
        $mk->andWhere('up.period BETWEEN :start AND :end');
        $mk->setParameter('start', $later);
        $mk->setParameter('end', $today);

        return $mk->getQuery()->getResult();

automatically this generates data for my page between the above dates.

Now I want to create a form where I can make a search between two dates.

with the intention of passing the posted data from this form to my controller into my method below

My controller below (controller1)

    protected function getData(EntityManagerInterface $entityManager,Request $request) {
    
    // this code to get data from repository
    $entityManager->getRepository(repository1::class)->getName()

// receive posted data
 $date1 = $request->get('date');
 $date2 = $request->get('date');

    // now how to pass data to my repository1
    
    }

Please how do I edit what I have to post data from within my controller to my (repository1)

so then it would be

  $mk = $this->createQueryBuilder('up');
    
            $later = $date1;
            $today = $date2;
            
            $mk->andWhere('up.period BETWEEN :start AND :end');
            $mk->setParameter('start', $later);
            $mk->setParameter('end', $today);
    
            return $mk->getQuery()->getResult();

is this even possible, or im over thinking it?

RepositoryClass

public function getByStartEndDate(DateTimeInterface $start, DateTimeInterface $end)
{
  return $this->createQueryBuilder('up')
    ->andWhere('up.period BETWEEN :start AND :end')
    ->setParameter('start', $start)
    ->setParameter('end', $end)
    ->getQuery()
    ->getResult()
  ;
}

Controller Class

private function getData(Request $request, RepositoryClass $repo)
{
  // May need to convert these to DateTime objects
  $start = $request->get('start');
  $end = $request->get('end');

  $records = $repo->getByStartEndDate($start, $end);

  // do what you want with the records here
}

You can give the dates as parameters to your method.

Controller Class:

protected function getData(EntityManagerInterface $entityManager,Request $request) {

    $start = $request->get('start') ? new \DateTime($request->get('start')) : null;
    $end = $request->get('end') ? new \DateTime($request->get('end')) : null;
    $result = $entityManager->getRepository(Entity::class)->getName($start, $end);

    // do with result as desired
}

Repository Class:

public function getName(\DateTimeInterface $start, \DateTimeInterface $end)
{
    return $this->createQueryBuilder('up')
                ->andWhere('up.period BETWEEN :start AND :end')
                ->setParameter('start', $start)
                ->setParameter('end', $end)
                ->getQuery()
                ->getResult()
    ;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM