お世話になります。
例えば、報告書テーブルがあったとしてその報告書には課長承認と部長承認2つの承認状態を持っているとして、
要件上指定した期限内に承認をとらないといけないとします。
ここでレコードのチェック状態を書くとき、それぞれのチェック状態をほしいのでチェック処理を作って、さらにその両方ともチェックされているかの処理も書くと
チェックロジックが分散してしまう気がしてしまいます。
php
1 2public function is_katyou_check($id) { 3 $sql = "SELECT * FROM `report` WHERE `id` = ? && `katyou_check` = 1 && `period_date` > NOW()"; 4 $stmt = $this->instance->prepare($sql); 5 $stmt->execute([$id]); 6} 7public function is_butyou_check($id) { 8 $sql = "SELECT * FROM `report` WHERE `id` = ? && `btyou_check` = 1 && `period_date` > NOW()"; 9 $stmt = $this->instance->prepare($sql); 10 $stmt->execute([$id]); 11} 12public function is_katyou_butyou_check($id) { 13 $sql = "SELECT * FROM `report` WHERE `id` = ? && `katyou_check` = 1 && `btyou_check` = 1 && `period_date` > NOW()"; 14 $stmt = $this->instance->prepare($sql); 15 $stmt->execute([$id]); 16} 17
上記では期限内であるかのチェックもいれていますが、期限内かどうか関係なく取得したい場合もあると思うので、それぞれの条件を書いていくとかなりめんどくさい気がしてしまいます。これをアプリケーション側で書くとチェックロジックが分散せずにかけるとおもっています。
php
1 2public function fetch($id) { 3 $sql = "SELECT * FROM `report` WHERE `id` = ? "; 4 $stmt = $this->instance->prepare($sql); 5 $stmt->execute([$id]); 6} 7public function is_katyou_check($report) { 8 if($report->katyou_check) { 9 return true; 10 } 11 return false; 12} 13public function is_butyou_check($report) { 14 if($report->butyou_check) { 15 return true; 16 } 17 return false; 18} 19public function is_not_expired($report) { 20 if($report->period_date > time()) { 21 return true; 22 } 23 return false; 24} 25public function is_katyou_butyou_check($report) { 26 if($this->is_katyou_check($report) && $this->is_butyou_check($report) && $this->is_not_expired($report)) { 27 return true; 28 } 29 return false; 30} 31 32public function check_report($id) { 33 $report = $this->fetch($id); 34 35 if($this->is_katyou_butyou_check($report) && $this->is_not_expired($report)) { 36 return true; 37 } 38 39 return false; 40} 41
上記の例だとsql側で書いたものと条件が処理がちょっと変わってるかもしれませんが、こんなイメージです。
どっちの方がいいのか悩んでいます。
皆様どのような設計で作っておられるのか、理由も含めてご意見いただければと思います。
よろしくお願いいたします。