CodeIgniter выбирает данные, добавляя ненужные запросы? - PullRequest
1 голос
/ 08 июля 2011

Я только начал использовать CodeIgniter и был действительно доволен результатами.

Одна вещь, которую я заметил, это то, что я, кажется, выбираю разные части строки с разными частями модели.
Примером может быть то, где на странице мне нужно получить текущего пользователяимя пользователя, а затем вниз мне нужен их адрес электронной почты.Это отдельные функции в модели (и, следовательно, отдельные запросы).Меня раздражает то, что я могу объединить их в один запрос (экономя накладные расходы), но если бы я это сделал, я бы потерял модульность, которую дает мне модель MVC (на многих других страницах мне просто нужно имя пользователя или адрес электронной почты, а не оба).Любые предложения о том, как пройти через это?

1 Ответ

0 голосов
/ 08 июля 2011

Да, но у меня есть определенная функция, возвращающая часть строки, и другая функция, возвращающая другой раздел строки. Мне это нужно, потому что большинству страниц нужен только один раздел строки, но некоторым страницам нужен и тот, и другой, поэтому мой код выполняет два запроса. Это только один пример. Здесь очень много. Мне было любопытно, есть ли шаблон дизайна для этого.

Вы говорите о ленивой загрузке. Таким образом, в вашей модели вы что-то используете для отслеживания состояния постоянных свойств, то есть были ли они загружены, изменены или модель полностью новая и еще не добавлена ​​в БД. Затем ваши получатели для каждого свойства сначала проверяют состояние, и если что-то еще не загружено, и модель не является «новой», то они запрашивают это свойство и устанавливают его в модели перед возвратом значения.

Так что ваше волшебное получение может выглядеть так (псевдокод - вам придется переводить в CI):

public function __get($property){
   if($this->isPersisted($property) && !$property->isLoaded() && !$this->isNew()){
      $this->$property = $this->db
        ->select($this->getColumn($property))
        ->from($this->tableName)
        ->where('id = ?', $this->id)
        ->fetchColumn(0);
   }

   return $this->property;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...