Итак, я должен сказать, что я совершенно новичок в 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
, он возвращает ожидаемые результаты за вычетом фильтрации на дату их ввода ... какие-либо идеи?