Как получить всех пользователей с постами и без? - PullRequest
0 голосов
/ 01 мая 2019

Я настраиваю новый вид, чтобы показать все имена пользователей с их заголовком на странице администратора. У меня есть 4 пользователя, 2 из которых (admin и david) отправили сообщение, а 2 из них не имеют сообщения, поэтому я просто мог сделать изображение ниже, и вы можете видеть, что у меня нет 2 пользователей без сообщения, так как я могу иметь они внутри изображения ниже и в столбце заголовка имеют «нет поста» для тех пользователей, у которых нет поста

Токовый выход enter image description here

Посмотреть / лезвие

@if ( $user->role_id === '1')
    @foreach ($allposts as $post)
        <tr>
            <th class="font-parsibit">{{ $post->title }}</th>
            <th class="font-parsibit">{{ $post->user->name }}</th>
            <th class="text-center">
                <a href="/posts/{{ $post->id }}" class="btn btn-success text-light">Display</a>
            </th>
            <th class="text-center">
                {!! Form::open(['action' => ['PostsController@destroy', $post->id], 'method' => 'POST', 'class' => 'mx-auto']) !!}
                {!! Form::hidden('_method','DELETE') !!}
                {!! Form::submit('Delete', ['class'=>'btn text-light btn-danger']) !!}
                {!! Form::close() !!}
            </th>
            <th class="text-center">
                <a href="/posts/{{ $post->id }}/edit/{{ $post->noo }}" class="btn btn-primary text-light">Edit</a>
            </th>
        </tr>
    @endforeach
@endif

Контроллер

public function index()
{
    $allposts = Post::with('user')->get();
    $bgvar = 'dashboard';

    return view('dashboard', compact('bgvar'), compact('allposts'));
}

Приведенный выше код работает правильно, но, как я уже сказал, показывает имя пользователя, отправившего сообщение со своим заголовком. Я ожидаю, что результат покажет мне всех пользователей с их заголовками, включая пользователей с отправленными постами и без них. Для пользователей, которые не отправляли никаких сообщений, я хочу показать "Нет сообщений" в заголовке.

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

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

Контроллер

public function index()
{
    $allPosts = Post::selectRaw("posts.id, users.name as user_name, CASE WHEN posts.id IS NULL THEN 'No Post' ELSE posts.title END AS title")
    ->rightJoin('users', 'posts.user_id', '=', 'users.id')
    ->where('users.role_id', 1)
    ->get();

    return view('dashboard', compact('bgvar'), compact('allPost'));
}

View

@foreach ($allPosts as $post)
    <tr>
        <th class="font-parsibit">{{ $post->title }}</th>
        <th class="font-parsibit">{{ $post->user_name }}</th>
        <th class="text-center">
        @if($post->id)
            <a href="/posts/{{ $post->id }}" class="btn btn-success text-light">Display</a>
        @endif       
        </th>
        <th class="text-center">
        @if($post->id)
            {!! Form::open(['action' => ['PostsController@destroy', $post->id], 'method' => 'POST', 'class' => 'mx-auto']) !!}
            {!! Form::hidden('_method','DELETE') !!}
            {!! Form::submit('Delete', ['class'=>'btn text-light btn-danger']) !!}
            {!! Form::close() !!}
        @endif
        </th>
        <th class="text-center">
        @if($post->id)
            <a href="/posts/{{ $post->id }}/edit/{{ $post->noo }}" class="btn btn-primary text-light">Edit</a>
        @endif  
        </th>
        </tr>
    @endforeach
0 голосов
/ 01 мая 2019

Вы можете попробовать с ternary operator.Нравится - <th class="font-parsibit">{{ $post->title != '' ? $post->title : 'No Post' }}</th>

...