Список пользователей, добавивших контент в определённую категорию.

#1 24 августа 2022 в 16:33

Как получить список пользователей (id), добавивших контент, в определённую категорию. Весь model контроллера users пролистал, вроде функции не нашёл, в model контроллера content тоже вроде нет. Может экшн category_view контроллера content, метод run? Но там не понятно..) Помогите, если кому понятно, как решить вопрос!

#2 24 августа 2022 в 17:18

Так попробуйте:

  1. $cat_id = 5; /*Номер нужной категории написать вместо 5*/
  2. $category_users = $this->model_users->join('con_news', 'n', 'n.user_id = i.id')->join('con_news_cats', 'nc', 'nc.id = n.category_id AND nc.id = ' . $cat_id)->getUsersIds();
  3. /* Вместо news висать системное имя типа контента */

Я, правда, не проверял., некогда.

#3 24 августа 2022 в 18:53

Если не важны записи с допкатегориями, то как-то так

  1. $this->model_content->filterEqual('category_id', 5)->groupBy('user_id')->get('con_news', function ($item){
  2. return $item['user_id'];
  3. });

Иначе надо джойнить таблицу с биндами категорий.

#4 24 августа 2022 в 21:52

Если не важны записи с допкатегориями, то как-то так

  1. $this->model_content->filterEqual('category_id', 5)->groupBy('user_id')->get('con_news', function ($item){
  2. return $item['user_id'];
  3. });

Иначе надо джойнить таблицу с биндами категорий.

Loadырь

Супер! Работает! Спасибо большое!

Добавлено спустя 11 минут

Так попробуйте:

  1. $cat_id = 5; /*Номер нужной категории написать вместо 5*/
  2. $category_users = $this->model_users->join('con_news', 'n', 'n.user_id = i.id')->join('con_news_cats', 'nc', 'nc.id = n.category_id AND nc.id = ' . $cat_id)->getUsersIds();
  3. /* Вместо news висать системное имя типа контента */

Я, правда, не проверял., некогда.

Ris

Спасибо! Ваш способ так же работает! Только почему-то ваши способы выдают разные ключи массива. У вас (Ris):

  1. Array ( [1] => 1 [3] => 3 )

У Loadырь:

  1. Array ( [1] => 1 [13] => 3 )

По сути, мне это не важно, мне главное id пользователей и в дальнейшем перебрать массив. 

#5 24 августа 2022 в 21:57

Если надо как у Ris, то тогда так

  1. $this->model_content->filterEqual('category_id', 5)->groupBy('user_id')->get('con_news', function ($item){
  2. return $item['user_id'];
  3. }, 'user_id');

У меня 1 и 13 — id записей, у него 1 и 3 — id пользователей

#6 24 августа 2022 в 22:16

Если надо как у Ris, то тогда так

  1. $this->model_content->filterEqual('category_id', 5)->groupBy('user_id')->get('con_news', function ($item){
  2. return $item['user_id'];
  3. }, 'user_id');

У меня 1 и 13 — id записей, у него 1 и 3 — id пользователей

Loadырь

Спасибо! Мне оба варианта подходят. 

Но вот ещё один момент, а как из этого массива, убрать пользователей, у которых в таблице cms_users, в столбце unsubscribe стоит «1»?

#7 24 августа 2022 в 22:18

 Vladimir

 Loadырь более правильно написал. Я что-то не с той стороны к задаче подошел. 🙂

#8 24 августа 2022 в 23:15

 Vladimir

 Loadырь более правильно написал. Я что-то не с той стороны к задаче подошел. 🙂

Ris

Здорово конечно, но всё же повторюсь 🙂,

а как из этого массива, убрать пользователей, у которых в таблице cms_users, в столбце unsubscribe стоит «1»?

Нашёл способ получить всех пользователей с проставленной «1» в столбце unsubscribe

  1. $users111 = cmsCore::getModel('users');
  2. $users222 = $users111->filterEqual('unsubscribe', 1)->get('cms_users');

Или без «1»

  1. $users111 = cmsCore::getModel('users');
  2. $users222 = $users111->filterEqual('unsubscribe', 'Null')->get('cms_users');

Осталось найти способ, как получить нужных пользователей.

Наверное как-то через join

#9 25 августа 2022 в 06:51

Наверное как-то через join

Vladimir

Именно

  1. $this->model_content->
  2. filterEqual('category_id', 5)->
  3. filterIsNull('u.unsubscribe')->
  4. joinUserLeft()->
  5. groupBy('user_id')->
  6. get('con_news', function ($item){
  7. return $item['user_id'];
  8. }, 'user_id');
#10 25 августа 2022 в 10:11

Наверное как-то через join

Vladimir

Именно

  1. $this->model_content->
  2. filterEqual('category_id', 5)->
  3. filterIsNull('u.unsubscribe')->
  4. joinUserLeft()->
  5. groupBy('user_id')->
  6. get('con_news', function ($item){
  7. return $item['user_id'];
  8. }, 'user_id');
Loadырь

Супер! Спасибо!

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.