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

В предыдущей статье мы рассмотрели список [полей пользователя.](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();
```

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.johncms.com/polzovateli/rabota-s-polzovatelyami-v-primerakh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
