# Работа с пользователями в примерах

В предыдущей статье мы рассмотрели список [полей пользователя.](https://johncms.com/documentation/user_fields/)\
Теперь давайте рассмотрим несколько примеров получения данных.\
Во всех примерах **$user** позволяет получить доступ ко всем полям, которые описаны в [предыдущей статье](https://johncms.com/documentation/user_fields/).

Модель пользователя уже имеет некоторые предустановленные условия для выборки (заготовки запросов).\
Например для получения подтвержденных пользователей, вы можете просто вызвать метод **approved()**, а для получения пользователей, которые сейчас находятся на сайте можно вызвать метод **online()**.

**Как это работает?**\
В моделях можно создавать свои заготовки частей запросов.\
Например сейчас есть заготовка, которая вызывается методом **approved()**.\
Эта заготовка по своей сути равнозначна обычному вызову **where('preg', '=', 1)**\
Это достаточно простой вариант, но есть вариант немного сложнее.\
Например чтобы получить пользователей онлайн нам нужно ограничить выборку по времени.\
Чтобы каждый раз не писать **where('lastdate', '>', (time() - 300))** мы можем вызвать заготовку **online()**.\
Теперь предположим, что у нас есть 10 страниц, на которых выводятся различные пользователи онлайн.\
Если бы мы не использовали заготовки запросов, нам бы пришлось везде писать условие для выборки **where('lastdate', '>', (time() - 300))** и если бы мы захотели изменить время, в течение которого мы считаем пользователя онлайн, то нам бы пришлось менять его во всех 10 страницах. С заготовкой же нам достаточно изменить время в одном месте и это изменение применится для всех страниц.

**А теперь перейдем к примерам:**

Получим последних 10 зарегистрированных и подтвержденных пользователей и выведем их идентификаторы и логины:

```php
$users = (new \Johncms\Users\User())->approved()->orderBy('id', 'desc')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 последних пользователей онлайн:

```php
$users = (new \Johncms\Users\User())->online()->orderBy('lastdate', 'desc')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим всех модераторов, администраторов, супервизоров и дополнительно выведем должность:

```php
$users = (new \Johncms\Users\User())->online()->where('rights', '>', 0)->orderBy('lastdate', 'desc')->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . ' -  ' . $user->rights_name . '<br>';
}
```

Получим 10 пользователей мужского пола:

```php
$users = (new \Johncms\Users\User())->where('sex', '=', 'm')->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 пользователей женского пола:

```php
$users = (new \Johncms\Users\User())->where('sex', '=', 'zh')->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 пользователей, у которых больше 100 постов на форуме:

```php
$users = (new \Johncms\Users\User())->where('postforum', '>', 100)->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Усложним задачу и получим всех пользователей у которых больше 100 постов и разобьём выборку страницы (15 пользователей на страницу):

```php
$users = (new \Johncms\Users\User())->where('postforum', '>', 100)->orderBy('id')->paginate(15);
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
echo $users->render();
```

Как видите, всё достаточно просто. Мы заменили **get()** на **paginate()** убрали **limit(10)** и в **paginate** передали количество пользователей, которое мы хотим видеть на одной странице.\
А дальше с помощью строки **echo $users->render();** отрисовали список страниц.

Ну и давайте рассмотрим ещё 1 пример. Получим список пользователей, у которых поле статус не пустое и так же разобьём на страницы и выведем текст статуса.

```php
$users = (new \Johncms\Users\User())->where('status', '!=', '')->orderBy('id')->paginate(15);
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . ' - ' . $user->status . '<br>';
}
echo $users->render();
```

На этом всё, если у вас остались вопросы, задайте их на форуме.
