Как использовать данные пользователя в модели


Суть задачи заключается в разбиении доступа всей БД. У каждого пользователя(условно users) есть только свои(условно posts), и я хотел выдавать Посты только к привязанным за ними пользователям
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class BlogPost extends Model
{
    static function users_doc(){
        return static::where('id', Auth::user()->id)->get();
    }
}

Хотел использовать такой синтаксис, но получаю ошибку Error Class 'App\Models\Auth' not found. На англоязычном форуме прочитал, что Auth нельзя использовать вообще в моделях. Может проблема в Именах, но ее исправить мне тоже не удалось.

Прошу помочь мне с этой проблемой.


Ответы (3 шт):

Автор решения: nomnoms12

Вы можете сделать это в контроллере, который отвечает за вывод записей блога.

Пример:

class BlogPostController extends Controller
{
    public function __invoke()
    {
        $blog_posts = BlogPost::where('user_id', request()->user()->id)->get()
        // ...
    }
}
→ Ссылка
Автор решения: nomnoms12

Вы можете определить связь между моделями.

Пример:

class User extends Authenticatable {
    public function blog_posts() {
        return $this->hasMany(BlogPost::class);
    }
}
class BlogPost extends Model {
    public function user() {
        return $this->belongsTo(User::class);
    }
}
$user->blog_posts;
→ Ссылка
Автор решения: Andy B

Лучше не использовать логику и объект auth() в модели, выделите для этого сервис или репозиторий, который отвечает за отправку данных, в конструкторе контроллера создайте экземпляр сервиса через контейнер DI и прокинте уже там юзера в сервис

→ Ссылка