Помогите разобраться. Вывод всех записей с одинаковым значением

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#1 27 марта 2019 в 08:59
Друзья, помогите разобраться.
Пытаюсь получить все записи по определенному значению стандартными методами движка, но зашел в тупик.

Есть таблица cms_con_model_car

id | model | color
1 | audi | red
2 | bmw | grey
3 | lexus | blue
4 | fiat | grey

нужно достать из БД все записи с 'color' = 'grey'
Должны отобразиться записи

2 | bmw| grey
4 | fiat | grey

В модели пытался сделать так:

  1.  
  2. public function getModelColor($color){
  3.  
  4. $this->filterStart();
  5. $this->filterEqual('color', $color);
  6. $this->filterOr();
  7. $this->filterLike('color', '%' . $color. '%');
  8. $this->filterEnd();
  9.  
  10. $models = $this->get('con_model_car');
  11.  
  12. return $models;
  13.  
  14. }
  15.  


И вот так:

  1.  
  2. public function getModelColor($color){
  3.  
  4. $models = $this->get('con_model_car', 'color', $color);
  5. return $models;
  6.  
  7. }
  8.  
Не получилось.

Думаю может вывести сначала все записи, $this->get('con_model_car');
а затем через forech получить нужные,

Но если есть возможность сразу сделать запрос с выборкой стандартными методами движка, то так будет лучше

"Застрял" на элементарном.

Помогите пожалуйста разобраться
#2 27 марта 2019 в 09:09

$this->filterStart();
$this->filterEqual('color', $color);
$this->filterOr();
$this->filterLike('color', '%'. $color. '%');
$this->filterEnd();

Red Ray
А зачем такая многоступенчатость?
Уж или
  1. $models = $this->filterEqual('color', $color)->get('con_model_car');
или
  1. $models = $this->filterLike('color', '%' . $color. '%')->get('con_model_car');
#3 27 марта 2019 в 09:24
Ris, понял, спасибо!
Проверил свой вариант и ваш вариант, в экшене работает, а в модели нет. Я вызываю функцию getModelColor в другой функции в модели. Значит где-то допустил ошибку.
Буду разбираться. Спасибо!
#4 27 марта 2019 в 09:32

Я вызываю функцию getModelColor в другой функции в модели.

Red Ray
Вам надо не функцию в модели вызывать, а просто фильтр.
  1. public function filterColor($color){
  2. $this->filterEqual('color', $color);
  3. return $this;
  4. }
А там уж когда будете получать список, просто воткните спереди
  1. $models = $this->filterColor($color)->get('con_model_car');
#5 27 марта 2019 в 09:58
Ris,
  1.  
  2. // получим все авто с определенным цветом
  3. // хочу отдельно сделать эту функцию, чтобы можно ,было получать авто по цвету, так и в других функциях модели ее вызывать для последующей обработки
  4.  
  5. public function filterColor($color){
  6. $this->filterEqual('color', $color);
  7. return $this;
  8. }
  9.  
  10. public function myNewFunction($color){
  11. $cars = $this->filterColor($color); // вызываем функцию filterColor и передаем ей значение
  12. if($cars) {
  13. // обрабатываем
  14. //.....
  15. //.....
  16. //.....
  17. //.....
  18. }
  19. }
  20.  
хотя конечно можно вместо того чтобы в функции myNewFunction обращаться к функции filterColor,

и как вы говорите прописать
  1.  
  2. $models = $this->filterColor($color)->get('con_model_car');
  3.  
то есть будет

  1.  
  2. public function myNewFunction($color){
  3. $models = $this->filterColor($color)->get('con_model_car');
  4. if($models) {
  5. // обрабатываем
  6. //.....
  7. //.....
  8. //.....
  9. //.....
  10. }
  11. }
  12.  
в обоих вариантах как я понимаю все правильно.
Единственное возможно по скорости будет отличаться.
#6 27 марта 2019 в 11:07

Единственное возможно по скорости будет отличаться.

Red Ray
Оба варианта одинаковы. На выходе в любом случае будет результат запроса
  1. SELECT * FROM cms_con_model_car WHERE color = 'gray'
Вы сначала придумывайте запрос mysql с помощью которого собираетесь получить нужные данные, а потом уж придумывайте, как это методами модели Инстанта оформить. Вам же проще будет.
#7 27 марта 2019 в 11:31
Ris,
Да, я сначала так и прописал, потом искал возможность этот запрос SELECT * FROM cms_con_model_car WHERE color = 'gray'
стандартными методами сделать.
В любом случае Ris, Спасибо Вам!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.