отредактировано: Symfony плюс сложное подключение к базе данных - PullRequest
0 голосов
/ 29 марта 2012

Итак, я должен сказать, что я совершенно новичок в Symfony, я использовал его в общей сложности около 4 дней, но до сих пор я достаточно далеко продвинулся в своих знаниях ...

Недавно я был добавлен в проект для добавления новой функции, поэтому я проверил репозиторий с помощью git и создал новую сущность и crud, чтобы начать работать с ней ... Стоит отметить, что эта система использует драйверы PDO MySQL.

В моей конфигурации доктрины yml для моей сущности у меня есть:

Ecs\CrmBundle\Entity\TimeClock:
type: entity
table: null
fields:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
    in1:
        type: datetime
    out1:
        type: datetime
    in2:
        type: datetime
    out2:
        type: datetime
    totaltime:
        type: string
    daydate:
        type: datetime
manyToOne:
    noteBy:
        targetEntity:  Ecs\AgentManagerBundle\Entity\User
lifecycleCallbacks: {  }

Это время для использования нашими сотрудниками ... Затем в моем контроллере часов, в index() функция, что мне нужно сделать, это искать в базе данных записи, которые являются этим payperiod, но только для агента, который вошел в систему ...

Так скажем, например, что я уже написал код для $start и $end, которые будут содержать даты в формате datetime ... например:

$start = "2012-03-24 00:00:00" и $end = "2012-03-31 23:59:59" соответственно ..

Код, который у меня сейчас есть, вытягиваетвсе записи для агента, вошедшего в систему:

public function indexAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $user = $this->get('security.context')->getToken()->getUser();
    // date format: YYYY-MM-DD HH:MM:SS
    $entities = $em->getRepository('EcsCrmBundle:TimeClock')->findBy(array('noteBy' => $user->getid()));

    return $this->render('EcsCrmBundle:TimeClock:index.html.twig', array(
        'entities' => $entities,
    ));
}

Итак, как мне расширить $entities, чтобы включить его с $start и $end?

[EDIT]

Я сделал немногоя немного переписал функцию indexAction ..

public function indexAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $user = $this->get('security.context')->getToken()->getUser();
    // date format: YYYY-MM-DD HH:MM:SS
    $today = time();
    if (date('l') == "Saturday") {
        $end = date('Y-m-d ')."23:59:59";
    } else {
        $end = date('Y-m-d ', strtotime('next_saturday', $today))."23:59:59";
    }
    $start = date('Y-m-d H:i:s', strtotime('last_sunday', $today));
    $entities = $em->getRepository('EcsCrmBundle:TimeClock');
    echo $user->getid();
    $query = $entities->createQueryBuilder('tc')
        ->where('tc.noteBy = :user')
        ->where('tc.daydate <= :end')
        ->where('tc.daydate >= :start')
        ->setParameter('user', $user->getid())
        ->setParameter('end', $end)
        ->setParameter('start', $start)
        ->getQuery();
    $entities = $query->getResult();

    return $this->render('EcsCrmBundle:TimeClock:index.html.twig', array(
        'entities' => $entities,
    ));
}

Но теперь, когда я запускаю ее, она дает мне следующее:

Invalid parameter number: number of bound variables does not match number of tokens, но нескажите мне, где проблема ... Если я удаляю функции 2 where(tc.daydate) и соответствующие функции setParameter, он возвращает ожидаемые результаты за вычетом фильтрации на дату их ввода ... какие-либо идеи?

1 Ответ

0 голосов
/ 30 марта 2012

Я понял это после поиска и поиска, и придумал не так много всего ... Проблема, как я предполагаю, состояла в том, что слишком много where команд ...

 public function indexAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $user = $this->get('security.context')->getToken()->getUser();
    // date format: YYYY-MM-DD HH:MM:SS
    $today = time();
    if (date('l') == "Saturday") {
        $end = date('Y-m-d ')."23:59:59";
    } else {
        $end = date('Y-m-d ', strtotime('next_saturday', $today))."23:59:59";
    }
    $start = date('Y-m-d H:i:s', strtotime('last_sunday', $today));
    $entities = $em->getRepository('EcsCrmBundle:TimeClock');
    echo $user->getid();
    $query = $entities->createQueryBuilder('tc')
        ->where('tc.noteBy = :user')
        ->andWhere('tc.daydate <= :end')
        ->andWhere('tc.daydate >= :start')
        ->setParameter('user', $user->getid())
        ->setParameter('end', $end)
        ->setParameter('start', $start)
        ->getQuery();
    $entities = $query->getResult();

    return $this->render('EcsCrmBundle:TimeClock:index.html.twig', array(
        'entities' => $entities,
    ));
}

меняется2 для daydate до andWhere полностью устранила проблему ..

...