バージョン選択

フォーラム

メニュー

オンライン状況

71 人のユーザが現在オンラインです。 (56 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 71
もっと...

サイト内検索

 > フロント機能 > ProductRepository.phpでデータベースの値を変数に入れる方法

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mirainak
投稿日時: 2016/6/6 19:10
対応状況: −−−
常連
登録日: 2016/3/8
居住地: 東京
投稿: 58
ProductRepository.phpでデータベースの値を変数に入れる方法
お世話になります。

ProductRepository.php

にて

dtb_product

内の特定のカラムを変数にいれたいですが、うまく入りません。

ちなみにOrder byの価格順の処理の中に書きたいです。
114行目あたりです。

カラム名を release_date と仮定。

他の書き方を参考に下記のような書き方をしますが、
$aaaに値がうまく入らないようです。

$aaa = ('p.release_date');

$aaa = ($searchData['release_date']);

もしわかる方がいましたらお願い致します。

DELIGHT
投稿日時: 2016/6/7 12:08
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: ProductRepository.phpでデータベースの値を変数に入れる方法
dtb_product

内の特定のカラムを変数にいれたい

$aaaに値がうまく入らないようです。

$aaa = ('p.release_date');
や
$aaa = ($searchData['release_date']);


これがどのような処理を想定しているのか分からないのですが、
商品テーブルに登録されているrelease_dateをこの時点で取得しようとしていますか?

この時点では検索条件を設定しているだけなので、実際のデータは勿論取得出来ません。

どういう処理を実装しようとしているか具体的に書いた方が回答者としてもエスパーしやすくなります。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

mirainak
投稿日時: 2016/6/7 13:05
対応状況: −−−
常連
登録日: 2016/3/8
居住地: 東京
投稿: 58
Re: ProductRepository.phpでデータベースの値を変数に入れる方法
DELIGHT様

ご連絡ありがとうございます。

release_date カラムには、

2016年12月1日や2015年5月26日、2014年8月6日

など文字列で日付が入っております。ある事情でdateではなくtextで入っています。

カテゴリのリスト(一覧)ページでこの日付順(DESC)で並べたいのですが、そのままですと、10月11月12月が1月の後ろに来たり、1日や6日など一桁の日付が二桁の日付よりも前に来てしまいます。

そこで素人ですが、下記のように、日付データっぽく変換して
ソートしたらうまくいくかもしれないと思った次第です。

XAMPPでテストしてみて release_date2に 2015年12月1日などいれると

2015-12-01 や 2016-01-21など0いりの数字で出力してくれる処理になります。

$release_date2 = ('p.release_date');
$release_date3 = str_replace("年", "-", $release_date2);
$release_date4 = str_replace("月", "-", $release_date3);
$release_date5 = str_replace("日", "", $release_date4);
$release_date6 = date("Y-m-d" , strtotime($release_date5));

$qb->orderBy($release_date6 , 'DESC');

phpの効率のよい書き方がわからず素人書きになりますが、

どうぞよろしくお願いいたします。
DELIGHT
投稿日時: 2016/6/7 13:56
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: ProductRepository.phpでデータベースの値を変数に入れる方法
PHPというよりSQLの領分ですね。
SQLで日付の文字列を日付型にキャストできるよう変換した上で日付型にキャストしてソートすることになると思います。

PostgreSQLなら
CAST(REGEXP_REPLACE(p.release_date, '^(\\d+)[^\\d]+(\\d+)[^\\d]+(\\d+).+', '\\1-\\2-\\3', 'g') AS TIMESTAMP)

とかにしますが、MySQLだと正規表現が使えないので
CAST(REPLACE(REPLACE(REPLACE(p.release_date, '日', ''), '月', '-'), '年', '-') AS DATETIME)

でしょうか。

p.release_dateの書式が統一されているかどうかも分からないため想定した動作を保証できませんし(最悪の場合エラー)、
上記のSQLに少しでも分からない点があるようなら、業者に有償でカスタマイズを依頼したほうがいい事案だと思います。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

mirainak
投稿日時: 2016/6/7 15:02
対応状況: 開発中
常連
登録日: 2016/3/8
居住地: 東京
投稿: 58
Re: ProductRepository.phpでデータベースの値を変数に入れる方法
DELIGHT様

ご連絡ありがとうございます。

もう一点だけお伺いさせてください。

上記のSQL分が使用できる場合、

ProductRepository.phpに記載するのでしょうか?
DELIGHT
投稿日時: 2016/6/7 15:37
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: ProductRepository.phpでデータベースの値を変数に入れる方法
同ファイル内の他のORDER BYを設定している箇所を参考になさって下さい。

ORDER BY句は単一のフィールド名である必要はありません。
例えば商品名の文字数の昇順でソートしたいのであれば下記のように指定できます。
ORDER BY CHAR_LENGTH(p.name) ASC


要は「2016年6月7日」という文字列を比較のために「2016/06/07 00:00:00」というDATETIME型に変換するのが先述のSQLです。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,854名です
総投稿数は109,989件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1291
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.