######説明
日付の比較を行っています。
コード量を減らして可読性を上げたいのですが、皆さんでしたら以下のコードをどのように書きますか?
■条件
<両方とも値がある>
$dnw05_afterDate
= '2017/02/01'
$dnw05_beforeDate
= '2017/02/28'
<afterDateのみ値がある>
$dnw05_afterDate
= '2017/02/01'
$dnw05_beforeDate
= ''
<beforeDateのみ値がある>
$dnw05_afterDate
= ''
$dnw05_beforeDate
= '2017/02/01'
PHP
1if(is_string($dnw05_afterDate) && $dnw05_afterDate !== ''){ 2 $query->where(function ($exp, $q) use($dnw05_afterDate,$dnw05_beforeDate){ 3 return $exp->addCase( 4 [ 5 $q->newExpr()->lte('dnw05', $dnw05_beforeDate), 6 $q->newExpr()->between('dnw05', $dnw05_afterDate, $dnw05_beforeDate), 7 $q->newExpr()->gte('dnw05', $dnw05_afterDate), 8 ] 9 ); 10 }); 11 }
######自分のレベルで考えられるコード
PHP
1if(is_string($dnw05_afterDate) && $dnw05_afterDate !== '' && is_string($dnw05_beforeDate) && $dnw05_beforeDate !== ''){ 2 //両方に値がある場合の処理 3}elseif{ 4・ 5・ 6・ 7}
と何と不恰好な方法しか考えられず、、、
#####追記
現状のコードから生成されるのがこちらのSQL文です。
SQL
1WHEN dnw05 <= '2017/01/31' THEN 'SMALL' 2WHEN dnw05 BETWEEN '2017/01/31' AND '2017/02/18' THEN 'MEDIUM' 3WHEN dnw05 >= '2017/02/18' THEN 'LARGE'
2つとも値がある場合
SQL
1WHEN dnw05 BETWEEN '2017/01/31' AND '2017/02/18' THEN 'MEDIUM'
afterDateのみ値がある場合
SQL
1WHEN dnw05 <= '2017/01/31' THEN 'SMALL'
beforeDateのみ値がある場合
SQL
1WHEN dnw05 >= '2017/02/18' THEN 'LARGE'
と値によって、出力を制御したいです。
回答3件
あなたの回答
tips
プレビュー