ホームページ >バックエンド開発 >PHPチュートリアル >Symfony2のクエリ例を入力時間別に詳しく解説

Symfony2のクエリ例を入力時間別に詳しく解説

小云云
小云云オリジナル
2018-02-10 13:18:521306ブラウズ

通常: フロントエンドが時刻を入力するとき、通常は最初に時刻をタイムスタンプに変更します strtotime - 英語テキストの日付と時刻の記述を解析して Unix タイムスタンプに変換します この記事では主に、入力時刻をクエリするための Symfony2 を紹介します。このメソッドは、サンプル フォームと組み合わせて、mysql と MongoDB の入力時間を変換およびクエリするための Symfony2 の関連操作スキルを分析します。

例:


$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);

次に: 時間だけの場合、他人が経過した時間が改ざんされるのを防ぐために、時間を Y-m-d


$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);

の形式に変更する必要があります1. MySQL で使用します


if(empty($startDate)) {
  throw new \Exception('起始时间不为空', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if (empty($endDate)) {
  $endDate = $startDate;
}
$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);
if ($startTimestamp > $endTimestamp) {
  throw new \Exception('时间参数错误', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if ($status == InventoryOrder::STATUS_SUBMITTED) {
  $index = 'i.submitTime';
} else if ($status == InventoryOrder::STATUS_UNSUBMITTED) {
  $index = 'i.createTime';
} else if (empty($status)) {
  $index = 'i.createTime';
} else {
  throw new \Exception('时间格式不正确', BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$sql = 'SELECT i FROM AppBundle:InventoryOrder i WHERE ';
$sql .= $index;
$sql .= ' BETWEEN :startDate AND :endDate ';
$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);
$params['endDate'] = $end;
$params['startDate'] = $start;
if (!empty($status)) {
  $sql .= ' AND i.status = :status';
  $params['status'] = $status;
}
$sql .=' ORDER By i.createTime DESC';
$query = $this->entityManager->createQuery($sql);
$orderList = $query->setParameters($params)->getResult();

2. mongodb での時間入力とクエリの例

これには実際には 2 つの落とし穴があります:


@ ->field('submit_time')->gt(new \DateTime($start))
->field('submit_time')->lt(new \DateTime($end))

ここでは、時間クエリの「より大きい」と「より小さい」について説明します。 、オブジェクトを渡す必要があります。


$query->field('status')->equals($status);

ここで、mongodb は、デフォルトではこれが int 型であることを識別するのに役立ちません。それがどのような型であるかは、手動で渡す必要があります。


$data = array();
if (!isset($startDate)) {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
if (empty($endDate)) {
  $endDate = $startDate;
}
$startTimestamp = strtotime($startDate);
$endTimestamp = strtotime($endDate);
if ($startTimestamp > $endTimestamp) {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$start = date('Y-m-d 00:00:00', $startTimestamp);
$end = date('Y-m-d 23:59:59', $endTimestamp);
$scanner = Order::FROM_TYPE_SCANNER;
$query = $this->documentManager
  ->createQueryBuilder('AppBundle:Order')
  ->field('submit_time')->gt(new \DateTime($start))
  ->field('submit_time')->lt(new \DateTime($end))
  ->field('from_type')->equals("$scanner");
if (!empty($status) && in_array($status, array(Order::STATUS_CANCELLED, Order::STATUS_SUBMITTED))) {
  $status = $status + 0;
  $query->field('status')->equals($status);
} else if (empty($status)) {
  $status = Order::STATUS_SUBMITTED + 0;
  $query->field('status')->equals($status);
} else {
  throw new \Exception("参数不正确", BaseException::ERROR_CODE_ILLEGAL_PARAMETER);
}
$orderList = $query->sort('create_time', 'DESC')
  ->getQuery()
  ->execute();

関連する推奨事項:

Symfony2フレームワークフォームの使用方法の詳細な説明

共同クエリを実装するためのSymfony2の方法の詳細な説明

クエリのSymfony2の入力時間の詳細な説明

以上がSymfony2のクエリ例を入力時間別に詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。