Как использовать данные пользователя в модели
Суть задачи заключается в разбиении доступа всей БД. У каждого пользователя(условно 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 и прокинте уже там юзера в сервис