Записать из базы данных значение в переменную Laravel
public function index(){
$user=auth()->user();
return view('admin.articles.index',[
'articles' => Article::with(['user' => function ($query) { $query->where('role_id','=', 1)->where('role_id','=', 3);}])-
>orderBy('created_at', 'desc')->paginate(10, ['*'], 'main_user_table'),
'articles_suggest' => Article::with(['user' => function ($query) { $query->where('role_id', 2) ;}])-
>orderBy('created_at', 'desc')->paginate(10, ['*'], 'suggestion_user_table'),
]);
}
Я хочу вывести данные статей, у которых автор будет через таблицу пользователей role_id = 1 и 3 , но почему то в переменную записывается прям всё ,все статьи , а когда я пытаюсь через IF проверить , то всегда вторая страница пустая, у первой 2 записи , все остальные на третий странице. Мне просто нужно , чтобы в переменную articles записалось только, только , только записи у который автор по роли 1 или 3 . Я не понимаю что не так...
@forelse ($articles as $article)
@if (isset($article->user->role_id))
@if (($article->user->role_id!=2))
<tr>
<td>{{$article->title}}</td>
<td>{{$article->published}}</td>
</tr>
@endif
@endif
@empty
Article model
public function user(){
return $this->belongsTo(User::class, 'author_id');
}
User model
public function articles(){
return $this->hasMany('App\Article');
}
index.php
public function index(){
$user=auth()->user();
return view('admin.articles.index',[
'articles' => Article::with('user')->whereHas('user', function ($query) { $query->whereIn('role_id', [1,2]); } )->orderBy('created_at', 'desc')->paginate(10, ['*'], 'main_user_table'),
}
Ответы (1 шт):
Автор решения: Nikita Noskov
→ Ссылка
- В этом фрагменте кода запрашиваются все записи
Article. Указанный внутри запрос применяется только при загрузке отношенияuser.
Article::with(['user' => function ($query) { $query->where('role_id','=', 1)->where('role_id','=', 3);}])
- В этом фрагменте кода у вас будет сгенерирован sql вида
where role_id = 1 and role_id = 3, я бы предложил вамwhere role_id in (1, 3).
$query->where('role_id','=', 1)->where('role_id','=', 3);
- Для решения вашей задачи можно воспользоваться методом
whereHas, с которым можно подробнее ознакомиться в документации Laravel. В вашем случае достаточно будет заменить код, который я указал в пункте 1 на этот.
Article::with('user')->whereHas('user', function ($query) {
$query->whereIn('role_id', [1, 3]);
});