Задать вопрос
@bpGusar
*spoiler*

Как вывести количество постов у пользователя?

Написал код:
public function index()
    {
        $user = DB::table('users')
            ->leftJoin('users_group', 'users.id_user_group', '=', 'users_group.id_user_group')
            ->orderby('created_at','asc')
            ->paginate(10);

        $userPosts = DB::table('users')
            ->Join('posts', 'users.id', '=', 'posts.id_user')
            ->where('posts.id_user', '=', 'users.id')
            ->count();

        return view('admin.users.allusers', compact( 'user', 'userPosts'));
    }


$user выводит данные о пользователе, $userPosts о количестве постов
в view сделал так
@foreach($user as $u)
                <tr>
                    <th scope="row">{{$u->id}}</th>
                    <th><img src="{{ asset('img/avatars/' . $u->avatar)}}" class="rounded img-fluid" style="width: 35px;"/></th>
                    <td><a target="_blank" href="{{URL::to('user/' . $u->id)}}" class="card-link">{{$u->name}}</a></td>
                    <td>{{$u->group_name}}</td>
                    <td>{{$userPosts}}</td> //тут вывод количества постов
                    <td>{{ Carbon\Carbon::parse($u->created_at)->format('d.m.Y') }}</td>
                    <td><div class="btn-group">
                            <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                Действие
                            </button>
                            <div class="dropdown-menu">
                                <a href="{{URL::to('admin/users/' . $u->id . '/edit')}}" class="dropdown-item"><i class="fa fa-pencil" aria-hidden="true"></i>Редактировать</a>
                                {!! Form::open(['method' => 'DELETE','route' => ['p.destroy', $u->id]]) !!}
                                {!! Form::submit('Удалить',['class'=>'dropdown-item']) !!}
                                {!! Form::close() !!}
                            </div>
                        </div></td>
                </tr>
            @endforeach


но вывод количества постов не работает, как сделать правильно?
  • Вопрос задан
  • 251 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@pantagruel964
// Model
public function posts()
{
    return $this->hasMany(Post::class);
}

// Controller
$users = User::withCount('posts')->get();

// View
@foreach ($users as $user)
    {{ $user->posts_count }}
@endforeach


Если религия позволяет, можете прочитать об этом в документации
Ответ написан
ajaxtelamonid
@ajaxtelamonid
Laravel
1. Почему join ? Почему бы не сделать через eloquent ? Это же проще и читаемее будет.
2. Смотрите, вы перебираете $users и в качестве количества постов каждый раз подставляете одно и то же число $userPosts.
Ответ написан
Flashter
@Flashter
Учусь программировать
судя по строчке
return view('admin.users.allusers', compact( 'user', 'userPosts'));
переменная $userPosts должна была уйти в массив. Могу предположить, что количество у вас сейчас по адресу $u->userPosts
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы