Выборка из БД в 2.0

#1 2 февраля 2015 в 17:03
Появилось 2 задачи которые я ну никак сделать не смог.

1. Запрос на кол-во полей с фильтром. Т.е. нужно узнать сколько записей в таблице компонента. Самое простое это:

  1. public function getCommentsCount(){
  2.  
  3. $count = $this->getCount('comments');
  4.  
  5. return $count;
  6.  
  7. }
функция выводит кол-во комментариев в таблице.
Пробовал сделать тоже самое для стороннего компонента:
  1. public function getComponCount(){
  2.  
  3. $count = $this->getCount('compon');
  4.  
  5. return $count;
  6.  
  7. }
тоже работает. Но мне нужно подсчитать не общее кол-во а только с определенным совпадением в другом столбце. Например по столбцу "Заголовок". Порывшись в примерах, написал следующее:
  1. public function getComponCount($title){
  2.  
  3. $this->filterEqual('title', $title);
  4. $count = $this->getCount('compon');
  5. return $count;
  6.  
  7. }
Пустая страница. В логах ничего не пишет.
В таблице 3 столбца: id, title, datetime
Причем если выборку делать по полю id то функция работает. Но надо по title. Может другую функцию нужно использовать?
#2 2 февраля 2015 в 17:27
Пока единственное, что приходит в голову-это
  1.  
  2. public function getComponCount($title){
  3.  
  4. $count = count($this->filterEqual('title', $title)->get('compon'));
  5. return $count;
  6.  
  7. }
  8.  
Если так не сработает, можно попробовать так

  1.  
  2. public function getComponCount($title){
  3.  
  4. $count = $this->filterEqual('title', $title)->get('compon');
  5. $count = count($count);
  6. return $count;
  7.  
  8. }
  9.  
#3 2 февраля 2015 в 18:26
Работает. Но как то странно. Если совпадений нет — возвращает 1, если есть одно совпадение — возвращает тоже 1, если два совпадения возвращает 2, если 3 то 3 и дальше нормально. А мне как раз и надо узнать что совпадений нет.
#4 2 февраля 2015 в 18:30
Разобрался, я изначально все почти правильно делал, просто перед каждой строкой нужно было дописывать свою переменную.

  1. public function getComponCount($title){
  2.  
  3. $count = $this->filterEqual('title', $title);
  4. $count = $this->getCount('compon');
  5. return $count;
  6.  
  7. }
#5 2 февраля 2015 в 19:03


Разобрался, я изначально все почти правильно делал, просто перед каждой строкой нужно было дописывать свою переменную.

  1. public function getComponCount($title){
  2.  
  3. $count = $this->filterEqual('title', $title);
  4. $count = $this->getCount('compon');
  5. return $count;
  6.  
  7. }

kreator

Метод filterEqual() возвращает экземпляр самой модели ($this) обратно. Нет смысла сохранять его в переменную, которая к тому же перезаписывается сразу же на следующей строке. У вас был правильный код в самом первом посте. Если он не работает, значит проблема в чем-то другом. Например в том, что вы ему передавали.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.