Laravel实现仅展示当前登录用户草稿文章的技术求助
问题修正:展示当前登录用户的草稿文章
控制器代码的核心问题
- 冗余参数:方法中的
Post $post和User $user属于路由模型绑定,但本接口无需接收具体的文章或用户实例,完全可以移除。 - 错误的where条件写法:第二个
where传入的是布尔表达式$post->user_id == auth()->user()->id,这会将true/false作为查询条件,而非正确的字段匹配逻辑。 - 枚举值匹配风险:使用
__('draft')可能导致翻译后的文本与数据库中status枚举的原始值(draft)不匹配,直接使用字符串常量更可靠。
修正后的控制器代码
public function draft() { // 方式1:直接查询Post模型 $drafts = Post::where('status', 'draft') ->where('user_id', auth()->user()->id) ->paginate(8); // 方式2:通过用户关联查询(更符合Eloquent最佳实践) // $drafts = auth()->user()->posts()->where('status', 'draft')->paginate(8); return view('post.draft', compact('drafts')); }
视图代码优化(可选)
原视图逻辑正常,仅建议调整空状态提示文本更贴合场景:
@forelse ($drafts as $draft) <div class="bg-white p-2"> <h2 class="text-black"> {{ $draft->title }} </h2> </div> @empty <p>{{ __('There are no draft posts') }}</p> @endforelse
模型代码说明
Post和User模型的关联定义已经正确,无需修改。
内容的提问来源于stack exchange,提问作者DonMartinWorks
相关产品推荐
相关产品推荐

