Как вывести список не id, а названий из другой таблицы?

В Laravel есть несколько способов вывести список не id, а названий из другой таблицы. Один из самых распространенных способов - использование связей между моделями.

Предположим, у вас есть две таблицы: "users" и "roles", и вы хотите вывести список пользователей соответствующих их ролям, используя названия ролей вместо id.

Первым шагом является определение связи между моделями "User" и "Role". Для этого в модели "User" необходимо добавить метод "role", используя метод "belongsTo" для указания отношения "User" принадлежит к "Role":

class User extends Model
{
    public function role()
    {
        return $this->belongsTo('AppRole');
    }
}

После определения связи вы сможете получить название роли пользователя, используя метод "role" вместо обращения к id роли. Например, чтобы вывести список пользователей с их ролями, вы можете сделать следующее:

$users = User::all();

foreach ($users as $user) {
    echo $user->name . ' - ' . $user->role->name;
}

В этом примере мы извлекаем всех пользователей из таблицы "users" и через цикл foreach выводим имя пользователя и название его роли, используя метод "role" для получения связанной роли и доступа к ее названию.

Также можно использовать метод "with" для предварительной загрузки связи "role", чтобы избежать проблем с N+1 запросами. Например:

$users = User::with('role')->get();

foreach ($users as $user) {
    echo $user->name . ' - ' . $user->role->name;
}

В этом случае метод "with" загрузит все связанные роли заранее, что снизит количество запросов к базе данных и улучшит производительность вашего приложения.

Надеюсь, данное объяснение помогло вам понять, как вывести список не id, а названий из другой таблицы в Laravel. Если у вас возникнут дополнительные вопросы, пожалуйста, не стесняйтесь задавать их.