子モデルが継承する親モデルの汎用挿入関数を作成することは一般的ですか、および/または賢明ですか?私は非常に単純なCRUDアプリでCodeIgniter\PHPを使用していますが、この質問は実際には言語\フレームワークに依存しません。1つの値を読み取る(選択する)読み取り関数を継承すると、非常にうまく機能し、正しいと感じます:親モデル
public function read($columnSelect,$columnCondition,$value) {
$query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
$res = $this->db->query($query,$columnName);
if ($res->result()->num_rows()>0)
return $res->result();
else
return false;
これにより、ユーザーID、電子メールの取得、特定の列の存在の確認などが可能になります。間違いなく、ほとんどまたはすべてのモデルで役立つと思うので、親モデルでその関数を作成することをお勧めします。より複雑なすべての読み取り関数は、明らかに各モデルに固有です(たとえば、複数の値を読み取るクエリなど)。挿入についてはどうでしょうか。1つの値、2つの値などを挿入する関数を作成するか、「醜い」関数を作成してパラメーターの配列を取得し、その配列に従って挿入クエリを作成する以外に、一般的な挿入は考えられません。例:
public function genericInsert($columnList,$valueList) {
$query = " INSERT INTO $tableName(
//now code that parses columnList and adds ','
//and then code that adds VALUES(..) in the same manner
これは間違いなく私にとって「パターン」のようには感じられず、間違っていると感じます。私は何かを見落としていますか?インサートに対して何をしますか?それは各モデルに固有ですか、それとも親モデルから継承する方法を考えようとしていますか?また、もしそうなら、あなたはあなた自身があなたの親モデルに入れていると思う関数は何ですか?(更新、削除など)?
これは私の親モデルがこれまでのように見えるものです:
class MY_Model extends CI_Model {
public $tableName;
public function __construct($tableName) {
parent::__construct();
$this->tableName = $tableName;
}
public function read($columnSelect,$columnCondition,$value) {
$query = "SELECT $columnSelect FROM $tableName WHERE $columConditionn=?";
$res = $this->db->query($query,$columnName);
if ($res->result()->num_rows()>0)
return $res->result();
else
return false;
}
}