首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个想法,可以使用auth中间件来检索用户的产品

问我有一个想法,可以使用auth中间件来检索用户的产品
EN

Stack Overflow用户
提问于 2021-08-13 10:12:04
回答 2查看 105关注 0票数 0

我有一个想法是使用auth中间件来检索用户的产品,但目前我不能检索该用户的产品。相反,它列出了其他用户的所有产品。你们能给我一些想法来帮助我完成它吗?谢谢!

​

​

这是我的ProjectController代码:

代码语言:javascript
复制
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Resources\ProjectResource;
use App\Models\Project;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class ProjectController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $projects = Project::all();

        return response([
            'projects' => ProjectResource::collection($projects),
            'message' => 'Retrieved successfully'
        ], 200);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $data = $request->all();

        $validator = Validator::make($data, [
            // 'uuid' => 'required|unique:projects',
            'user_id' => 'required',
            'name' => 'required|max:255',
            'status' => 'required',
        ]);

        if ($validator->fails()) {
            return response(['error' => $validator->errors(), 'Validation Error']);
        }

        $projects = Project::create($data);

        return response(['projects' => new ProjectResource($projects), 'message' => 'Created successfully'], 201);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show(Project $project)
    {
        return response(['project' => new ProjectResource($project), 'message' => 'Retrieved successfully'], 200);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Project $project)
    {
        $project->update($request->all());

        return response(['project' => new ProjectResource($project), 'message' => 'Update successfully'], 200);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Project $project)
    {
        $project->delete();

        return response(['message' => 'Deleted'], 204);
    }
}

这是我的ProjectModel代码:

代码语言:javascript
复制
<?php

namespace App\Models;

use App\Enums\ProjectStatus;
use App\Http\Traits\Uuid;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Project extends Model
{
    use HasFactory;
    use Uuid;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'status',
        'user_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'id',
        'uuid',
    ];

    protected $cast = [
        'status' => ProjectStatus::class
    ];

    public function setUuidAttribute()
    {
        $this->attributes['uuid'] = Str::uuid();
    }
}

这是我的API路由器代码:

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-13 10:40:57

您必须首先检索用户才能过滤产品。有多种方法可以做到这一点。以下是Laravel关于该主题的文档的链接:https://laravel.com/docs/8.x/authentication#retrieving-the-authenticated-user

您还必须过滤您的查询(您的查询是Project::all()),以便它只检索用户的产品。以下是一些与此相关的Laravel文档的链接:https://laravel.com/docs/8.x/eloquent#retrieving-models

最后,用这个$projects = Project::where('user_id', auth()->user()->id);替换这个$projects = Project::all();应该可以解决这个问题。

票数 2
EN

Stack Overflow用户

发布于 2021-08-13 10:47:49

尝尝这个

代码语言:javascript
复制
public function index()
    {
        $projects = Project::where('user_id', auth()->id())->get();

        return response([
            'projects' => ProjectResource::collection($projects),
            'message' => 'Retrieved successfully'
        ], 200);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68770468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档