Конструктор запросов Laravel с пользователем и авторизацией

Как составить список всех строк из таблицы (повесток дня) в моей БД, где записи сохраняются подключенным пользователем. Я использую аутентификацию по умолчанию из Laravel.

public function index ($id = null)

    {
        $agendas = Agenda::where('id', Auth::user()->id)->get();
        $users = User::all();
        return view('admin.agendas.index', compact('agendas','users','id'));
    }

Мой контроллер здесь. Нужна помощь

Есть ли в таблице повестки дня столбец user_id, связывающий его с записью в таблице пользователей? Какая связь определена между пользователем и моделью повестки дня, например: у пользователя есть много повесток дня и повестка дня принадлежит пользователю?

Donkarnash 21.12.2020 11:29

Используйте отношения.

abhay 21.12.2020 11:34
Agenda::where('id', Auth::user()->id) получает повестку дня, где идентификатор является идентификатором пользователя, что неверно. Пожалуйста, опубликуйте свои отношения
brombeer 21.12.2020 11:34

Здравствуйте, Донкарнаш, Модельная повестка дня и Пользователь не имеют отношения. Позвольте мне попробовать это. Спасибо

Saliou MBALO 21.12.2020 11:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
4
716
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Предполагая

  • таблица повестки дня (содержащая записи для модели повестки дня) имеет столбец user_id, который ссылается на столбец id в таблице пользователей
  • У пользователя много повесток дня
  • Повестка дня принадлежит пользователю

class User extends Model
{
    public function agendas()
    {
        return $this->hasMany(Agenda::class);
    }

    //... rest of class code
}


class Agenda extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    //... rest of class code
}


public function index($id = null)
{

    $user = User::with('agendas')->findOrFail(auth()->id());

    return view('admin.agendas.index', [
        'user' => $user,
        'agendas' => $user->agendas,
        'id' => $id
    ]);
}

Позвольте мне попробовать это и вернуть вас как можно скорее. Большое спасибо

Saliou MBALO 21.12.2020 11:46

Привет Донкарнаш, Большое спасибо. Работает

Saliou MBALO 21.12.2020 14:15

Ваша модель User должна иметь отношения:

public function agendas()
{
    return $this->hasMany(Agenda::class);
}

В вашем контроллере вы можете упростить использование как таковое:

public function index (Request $request, $id = null)
{
    $agendas = $request->user()->agendas;
    $users = User::all();
    return view('admin.agendas.index', compact('agendas','users','id'));
}

если вы хотите получить данные, связанные с другими данными, вам нужно объединить эти таблицы вместе с помощью поля. в этом случае, я думаю, у вас есть столбец в таблице Agenda с именем «user_id».

у вас есть два пути:

  1. присоединиться к таблицам в вашей модели.
  2. поиск в таблице повестки дня в вашем контроллере

если вы хотите использовать объединение ваших таблиц из модели:

// in App\User.php
...
class User ...{
...

    public function Agenda(){
        return $this->hasMany(Agenda::class);
    }
...
}
...

то вы можете получить доступ ко всем «Повестке дня» отовсюду, например: Auth()->user()->agenda

если вы хотите выполнить поиск в таблице с вашего контроллера, вы можете сделать: Agenda::where('id', Auth::user()->id)

вы можете прочитать больше о красноречивых отношениях в: https://laravel.com/docs/8.x/eloquent-relationships

Другие вопросы по теме