Laravel: как получить все зарегистрированные сообщения пользователей, используя переменную сеанса

Я создал проект, который позволяет зарегистрированным пользователям создавать сообщения. В таблице сообщений есть столбец под названием post_id. post_id имеет значение идентификатора пользователя, полученное из Session::get('id').

Теперь я хочу получить все сообщения, связанные с вошедшим в систему пользователем, с помощью Post::where('post_id','=',Session::get('id');

Код ниже

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
//use App\Models\User;
use App\Models\Post;
use Session;


class PostController extends Controller
{
  public function post(Request $request){
         $posts = Post::where('post_id','=',Session::get('id'));
         return view('dashboard',['posts' => $posts]);
   }
}

в веб.php

use App\Http\Controllers\PostController;

Route::get('/dashaboard',[PostController::class,'post']);

в виде приборной панели

@foreach ($posts as $post)
                    <tr>
                        <td>{{$post->post_title}}</td>
                        <td>{{$post->post_description}}</td>
                    </tr>
                @endforeach

Ошибка

Неопределенная переменная $posts

Я попытался получить зарегистрированные сообщения пользователя. Я хочу получить все сообщения.

альтернатива session::get(id) использует auth()->id() или auth()->user()->id

Win 01.02.2023 05:32

вам просто не хватает ->get() в конце вашего запроса $posts = Post::where('user_id','=',Session::get('id'))->get(); или используйте ответ @jerothor (отношения пользователя и сообщения), о, и измените post_id на user_id ^_^

Win 01.02.2023 05:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Итак, ваша установка немного сбивает с толку. Позвольте мне сломать, как вы должны на самом деле настроить это.

В вашей модели User вы должны определить отношения для сообщений:

public function posts() {
  return $this->hasMany(Post::class);
}

В вашей модели Post вы должны определить отношение для пользователя:

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

В вашей таблице базы данных сообщений вам понадобится целочисленный столбец user_id, в котором будет храниться идентификатор пользователя сообщения.

После того, как вы выполнили эту настройку, вы сможете получать сообщения всех зарегистрированных пользователей, например:

  public function post(Request $request){
         $posts = $request->user()->posts;
         return view('dashboard',['posts' => $posts]);
   }
Ответ принят как подходящий

Небольшая поправка к красноречивому запросу, который вы используете.

$user_id = Session::get('id');

// change post_id into user_id
// and add ->get() to fetch all posts related to user_id
$posts = Post::where('user_id','=', $user_id)->get();

А если у пользователя много постов, например больше 25.
Вы можете использовать пагинацию

$perPage = 25;
$posts = Post::where('user_id','=', $user_id)->paginate($perPage);

https://laravel.com/docs/9.x/pagination#paginating-eloquent-results

Кстати, есть другой способ получить идентификатор пользователя, если этот пользователь вошел в систему.

$user_id = auth()->user()->id;
$user_id = $request->user()->id;
$user_id = auth()->id();

Для входа в систему с идентификатором пользователя

использовать авторизацию; $user_id = Auth::user()->id;

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