gpt4 book ai didi

sql - 如何检查是否已提交日期 (dd/mm/yyyy)?

转载 作者:行者123 更新时间:2023-12-01 15:21:04 35 4
gpt4 key购买 nike

我有一个过滤栏,您可以在其中搜索名称和车辆品牌,但我想知道如何实际检查这种格式的日期 -> dd/mm/yyyy 因为我什么都不知道发生在我搜索日期时,我收到一个没有错误的空白页,但只有零个结果。

我找到了一个使用 $fullDate = DateTime::createFromFormat('d/m/Y',$filter); 的解决方案,但我很难将其添加到我的代码中。

所以我将与您分享我的代码和我研究的内容

您可以在其中查看带有过滤器参数的所有查询的查询(针对我的搜索)

public function getQueryByTypeAndPro($type, User $user, $archive, $filter)
{

$fullDate = \DateTime::createFromFormat('d/m/Y', $filter);
$qb = $this->createQueryBuilder("opn");

$or = new Orx();

if($fullDate !== false) {
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.dateCreation', ':filter'));
} else {
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.id', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.vehiculeMarque', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.clientNom', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.clientPrenom', ':filter'));
}

$or->addMultiple($textFilters);
$qb->andWhere($or);

$query = $qb
->andWhere("opn.type = :type")
->andWhere("opn.resellerId = :reseller")
->andWhere("opn.archive = :archive")
->setParameters([
"type" => $type,
"reseller" => $user->getId(),
'archive' => $archive,
'filter' => '%' . $filter . '%'
])
->orderBy("opn.dateCreation", "DESC")
->getQuery()
;

return $query;
}

当我以这种格式进行日期搜索时,这是它在我的查询分析器中显示的内容 dd/mm/yyyy

SELECT 
count(r0_.id) AS sclr0
FROM
reseller_operation r0_
WHERE
r0_.dateCreation LIKE ?
AND r0_.type = ?
AND r0_.reseller_id = ?
AND r0_.archive = ?

所以现在这段代码的工作方式是当我进行转储时 dump($fullDate) 当我不输入日期时它显示 false,当我输入日期时显示日期我愿意。所以我想目前确实有效。我仍然遇到的问题是它没有显示任何结果,只是一个空白页面,结果为零。

我不知道你是否需要我的 Controller 或我的 Twig 来获得更好的画面?我没有把它们放在这里是因为我认为这没有必要,但请随时问我。

最佳答案

你做得很好。在您的 Repository 中,您可以检查 filter 是日期时间还是字符串,并相应地设计您的查询。

createFromFormat 将返回 false,如果它没有从提供的字符串中获取正确的日期格式,我们可以利用它。

我已经根据我的理解编辑了您的代码:

 public function getQueryByTypeAndPro($type, User $user, $archive, $filter)
{
$fullDate = \DateTime::createFromFormat('d/m/Y',$filter);


$qb = $this->createQueryBuilder("opn");

$or = new Orx();

$params = [
"type" => $type,
"reseller" => $user->getId(),
'archive' => $archive,
'filter' => '%' . $filter . '%'
];

// Filter date only if the filter is a valid date.
if ($fullDate !== false) {
$date = $fullDate->format('Y-m-d');
$textFilters[] = $qb->expr()->andX($qb->expr()->eq('opn.dateCreation', ':date_filter'));
$params['date_filter'] = $date;
}
else {
// Filter considerting filter as a name or anything else.
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.id', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.vehiculeMarque', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.clientNom', ':filter'));
$textFilters[] = $qb->expr()->orx($qb->expr()->like('opn.clientPrenom', ':filter'));
}

$or->addMultiple($textFilters);
$qb->andWhere($or);

$query = $qb
->andWhere("opn.type = :type")
->andWhere("opn.resellerId = :reseller")
->andWhere("opn.archive = :archive")
->setParameters($params)
->orderBy("opn.dateCreation", "DESC")
->getQuery()
;

return $query;
}

有道理吗?

关于sql - 如何检查是否已提交日期 (dd/mm/yyyy)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46315342/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com