https://github.com/joostvanveen/build-a-cms-with-codeigniterコア フォルダーにMY_Model 、ライブラリに Admin_Controller、新しい Web サイトで使用しているソース コードがあります。これがデータをどのように流すかは気に入っていますが、画像のアップロードと更新に問題があります。画像のアップロードはうまくいくのですが、データを編集するたびにデータベースの画像名が消えてしまいます。それらをすべて更新します。他のフィールドの更新を停止する方法は知っていますが、同じ方法が画像に対して機能しません。
これはデータが保存される方法であり、ユーザー モデル (user_m) には検証と新しい変数とテーブルの選択があります。関数 'save' は MY_Model で定義されています。user_m はデフォルトの CI_Model ではなく MY_Model を拡張します。以下のコードは、挿入と更新を行います。save 関数内で定義されます。$id が提供された場合、更新が行われ、それ以外の場合は新しいアイテムが挿入されます。
// Insert
if ($id === NULL) {
!isset($data[$this->_primary_key]) || $data[$this->_primary_key] = NULL;
$this->db->set($data);
$this->db->insert($this->_table_name);
$id = $this->db->insert_id();
}
// Update
else {
$filter = $this->_primary_filter;
$id = $filter($id);
$this->db->set($data);
$this->db->where($this->_primary_key, $id);
$this->db->update($this->_table_name);
}
そして、これはユーザーコントローラーで呼び出される方法です::
$this->user_m->save($data, $id);
$data の定義方法は次のとおりです。
$data = $this->user_m->array_from_post(array('name', 'email', 'password'));
array_from_post 関数は MY_Model で次のように定義されています。
public function array_from_post($fields){
$data = array();
foreach ($fields as $field) {
$data[$field] = $this->input->post($field);
}
return $data;
}
tutsplusフォーラムでこれを見つけました:
if(isset($data['password'])){ $data['password'] = $this->user_m->$data['password']; }else{ unset($data['password']); }
このコードは、更新されていないときに $data['password'] の設定を解除するだけで、データベース内の値を変更せずに他のフィールドを更新できます。
画像の更新で同じことを行う方法はありますか? 必要に応じて、より多くのソース コードを提供できます。
JoostVanVeen のコースを知っている人はいますか? データは彼のコースと同じように流れます。