Codeigniter, как отобразить класс, отправленный на модель - PullRequest
0 голосов
/ 02 июня 2011

У меня есть SectorModel с этой функцией:

public function update(Sector $sector) {
        $this->db->where('sector_id', $sector->getScetor_id());
        return $this->db->update(_SECTOR_, $sector);
} 

Бывают случаи, когда я меняю только имя объекта Sector:

$Sector = new Sector();
$Sector->setSector_name = 'test';

$this->SectorModel->update($Sector); 

Сгенерированный выбор выглядит так:

UPDATE realestate_sector SET sector_name = 'teste', sector_description = NULL 

Обновится, но все остальные свойства будут установлены в NULL, потому что это не было установлено для моего объекта. Прямо сейчас я должен заполнить весь объект перед отправкой.

Есть ли способ отобразить класс Sector и обновить только то, что было отправлено на объекте?

Заранее спасибо за любую помощь.

Извините за любые опечатки, мой английский не хорошо =)

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Просто переберите все свойства вашего объекта, а затем, если он есть, NULL, просто отбросьте его с unset .

Вот метод вашей модели, отредактированный для достижениячто:

public function update(Sector $sector)
{
   foreach($sector as $k=>$v)
   {
      if($v === NULL)
         unset($sector->$k)
   }

   $this->db->where('sector_id', $sector->getScetor_id());
   return $this->db->update(_SECTOR_, $sector);
} 

Здесь вы можете найти некоторую информацию об итерации объектов в PHP

1 голос
/ 02 июня 2011

Для этого проще всего использовать массив - здесь документы http://codeigniter.com/user_guide/database/active_record.html#update - вы просто создаете массив всех столбцов со значениями, которые вы хотите обновить, и выполняете вызов $this->db->update('mytable', array('name' => 'test'), array('id' => $id));.Это обновит только те столбцы, которые вы указали в первом массиве.Со вторым массивом, действующим как выражение WHERE.

Единственная причина, по которой я могу придумать, почему другие ваши значения установлены в NULL, заключается в том, что в вашем примере вы создаете новый экземпляр класса, а другие значения должны быть либо равны нулю, либоустановить в NULL.(Если это так) было бы лучше получить запись из таблицы, а затем изменить и значения в заполненной записи и передать ее в функцию для обновления.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...