Beispiel #1
0
 /**
  * 指定されたキーと複数値の有効性のDB確認
  *
  * @param  string  $table     テーブル名
  * @param  string  $tblkey    テーブルキー名
  * @param  string  $keyname   フォームキー名
  * @param  array   $item      入力データ配列
  * @param  string  $delimiter 分割文字
  * @return boolean true:有効なデータがある false:有効ではない
  */
 public function lfIsDbRecordMulti($table, $tblkey, $keyname, $item, $delimiter = ',')
 {
     if (array_search($keyname, $this->arrFormKeyList) === FALSE) {
         return true;
     }
     if ($item[$keyname] == '') {
         return true;
     }
     $arrItems = explode($delimiter, $item[$keyname]);
     //空項目のチェック 1つでも空指定があったら不正とする。
     if (array_search('', $arrItems) !== FALSE) {
         return false;
     }
     $count = count($arrItems);
     $where = $tblkey . ' IN (' . Utils::repeatStrWithSeparator('?', $count) . ')';
     $objQuery = Application::alias('eccube.query');
     $db_count = $objQuery->count($table, $where, $arrItems);
     if ($count != $db_count) {
         return false;
     }
     return true;
 }
Beispiel #2
0
 /**
  * 商品IDをキーにした, 商品ステータスIDの配列を取得する.
  *
  * @param array 商品ID の配列
  * @return array 商品IDをキーにした商品ステータスIDの配列
  */
 public function getProductStatus($productIds)
 {
     if (empty($productIds)) {
         return array();
     }
     /* @var $objQuery Query */
     $objQuery = Application::alias('eccube.query');
     $cols = 'product_id, product_status_id';
     $from = 'dtb_product_status';
     $where = 'del_flg = 0 AND product_id IN (' . Utils::repeatStrWithSeparator('?', count($productIds)) . ')';
     $productStatus = $objQuery->select($cols, $from, $where, $productIds);
     $results = array();
     foreach ($productStatus as $status) {
         $results[$status['product_id']][] = $status['product_status_id'];
     }
     return $results;
 }
Beispiel #3
0
 /**
  * クエリを構築する.
  *
  * 検索条件のキーに応じた WHERE 句と, クエリパラメーターを構築する.
  * クエリパラメーターは, FormParam の入力値から取得する.
  *
  * 構築内容は, 引数の $where 及び $arrValues にそれぞれ追加される.
  *
  * @param  string       $key          検索条件のキー
  * @param  string       $where        構築する WHERE 句
  * @param  array        $arrValues    構築するクエリパラメーター
  * @param  FormParam $objFormParam FormParam インスタンス
  * @param  FormParam $objDb        DbHelper インスタンス
  * @return void
  */
 public function buildQuery($key, &$where, &$arrValues, &$objFormParam, &$objDb)
 {
     /* @var $dbFactory DBFactory */
     $dbFactory = Application::alias('eccube.db.factory');
     switch ($key) {
         // 商品ID
         case 'search_product_id':
             $where .= ' AND product_id = ?';
             $arrValues[] = sprintf('%d', $objFormParam->getValue($key));
             break;
             // 商品コード
         // 商品コード
         case 'search_product_code':
             $where .= ' AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? AND del_flg = 0)';
             $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
             break;
             // 商品名
         // 商品名
         case 'search_name':
             $where .= ' AND name LIKE ?';
             $arrValues[] = sprintf('%%%s%%', $objFormParam->getValue($key));
             break;
             // カテゴリ
         // カテゴリ
         case 'search_category_id':
             list($tmp_where, $tmp_Values) = $objDb->getCatWhere($objFormParam->getValue($key));
             if ($tmp_where != '') {
                 $where .= ' AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE ' . $tmp_where . ')';
                 $arrValues = array_merge((array) $arrValues, (array) $tmp_Values);
             }
             break;
             // 種別
         // 種別
         case 'search_status':
             $tmp_where = '';
             foreach ($objFormParam->getValue($key) as $element) {
                 if ($element != '') {
                     if (Utils::isBlank($tmp_where)) {
                         $tmp_where .= ' AND (status = ?';
                     } else {
                         $tmp_where .= ' OR status = ?';
                     }
                     $arrValues[] = $element;
                 }
             }
             if (!Utils::isBlank($tmp_where)) {
                 $tmp_where .= ')';
                 $where .= " {$tmp_where} ";
             }
             break;
             // 登録・更新日(開始)
         // 登録・更新日(開始)
         case 'search_startyear':
             $date = Utils::sfGetTimestamp($objFormParam->getValue('search_startyear'), $objFormParam->getValue('search_startmonth'), $objFormParam->getValue('search_startday'));
             $where .= ' AND update_date >= ?';
             $arrValues[] = $date;
             break;
             // 登録・更新日(終了)
         // 登録・更新日(終了)
         case 'search_endyear':
             $date = Utils::sfGetTimestamp($objFormParam->getValue('search_endyear'), $objFormParam->getValue('search_endmonth'), $objFormParam->getValue('search_endday'), true);
             $where .= ' AND update_date <= ?';
             $arrValues[] = $date;
             break;
             // 商品ステータス
         // 商品ステータス
         case 'search_product_statuses':
             $arrPartVal = $objFormParam->getValue($key);
             $count = count($arrPartVal);
             if ($count >= 1) {
                 $where .= ' ' . 'AND product_id IN (' . '    SELECT product_id FROM dtb_product_status WHERE product_status_id IN (' . Utils::repeatStrWithSeparator('?', $count) . ')' . ')';
                 $arrValues = array_merge($arrValues, $arrPartVal);
             }
             break;
         default:
             break;
     }
 }
Beispiel #4
0
 /**
  * カテゴリから商品を検索する場合のWHERE文と値を返す.
  *
  * @param  integer $category_id カテゴリID
  * @return array   商品を検索する場合の配列
  */
 public function getCatWhere($category_id)
 {
     // 子カテゴリIDの取得
     $arrRet = $this->getChildrenArray('dtb_category', 'parent_category_id', 'category_id', $category_id);
     $where = 'category_id IN (' . Utils::repeatStrWithSeparator('?', count($arrRet)) . ')';
     return array($where, $arrRet);
 }