草稿帖子不应该显示在视图中

问题描述 投票:0回答:1

我在控制器中有一个方法,该方法可以按用户 ID 显示所有帖子。每个帖子都有一个 user_id (关系 1/M)。 每个帖子都有一个 ENUM(状态),有 3 个选择(活动/非活动/草稿

我对控制器方法的想法是仅显示 status 作为草稿的所有帖子,并且 user_id 必须与帖子 user_id 相同。

这是方法(控制器):

public function draft(Post $post, User $user)
{
    $drafts = Post::where('status', __('draft'))
        ->where($post->user_id == auth()->user()->id)
        ->paginate(8);

    return view('post.draft', compact('drafts'));
}

这个想法是将所有匹配的帖子显示为草稿,并且登录的用户(id)等于 user_id ,该 user_id 属于帖子 user_id。

这就是我在刀片中显示的方式:

@forelse ($drafts as $draft)
    <div class="bg-white p-2">
        <h2 class="text-black">
            {{ $draft->title }}
        </h2>
    </div>
@empty
    <p>{{ __('There is no posts') }}</p>
@endforelse

在我拥有的模型中:

帖子:

protected $guarded = ['id', 'created_at', 'updated_at'];

public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

用户:

public function posts(): HasMany
{
    return $this->hasMany(Post::class);
}
laravel laravel-blade
1个回答
0
投票

你的

draft
方法应该如下,

public function draft(User $user)
{
    $drafts = Post::where('status', 'draft')
        ->where('user_id', auth()->user()->id)
        ->paginate(8);

    return view('post.draft', compact('drafts'));
}

您的

draft
方法有 2 个问题

  1. 您正在使用

    __('draft')
    ,它将返回字符串
    draft
    的翻译值。检查
    __()
    这里的用法。

  2. where($post->user_id == auth()->user()->id)
    。在
    where()
    中,您需要提供列名称,即
    user_id

© www.soinside.com 2019 - 2024. All rights reserved.