代码之家  ›  专栏  ›  技术社区  ›  Nitish Kumar

在laravel中使用pluck()helper函数

  •  0
  • Nitish Kumar  · 技术社区  · 8 年前

    我正在构建一个小应用程序 laravel 5.5 我从以下表格中获得了一个包含这些信息的多个用户的列表:

    {
        "name":"Test",
        "description":"Test the description",
        "users":[
            {
                "value":"XYZabc123",
                "name":"Nitish Kumar",
                "email":"nitishkumar@noeticitservices.com"
            },
            {
                "value":"MFnjMdNz2DIzMJJS",
                "name":"Rajesh Kumar Sinha",
                "email":"rajesh@noeticitservices.com"
            }
        ]
    }
    

    我只是想得到 value 通过键形成用户阵列 laravel collection 类似这样:

    $userIds = $request->users->pluck('value');
    

    这样我就可以对它们进行查询:

    $user = User::all()->whereIn('unique_id', $userIds);
    

    也许我大部分事情都做错了,但我的主要动机是 helper 函数并为此生成更清晰的代码:

    $teamData['name'] = $request->name;
    $teamData['description'] = $request->description;
    $teamData['unique_id'] = str_random();
    
    $users = $request->users;
    
    $team = Team::create($teamData);
    
    if($team)
    {
        $userIds = [];
    
        foreach ($users as $user)
        {
            $getUser = User::where('unique_id', $user['value'])->get()->first();
            $userIds [] = $getUser->id;
        }
    
        $team->users()->attach($userIds);
    
        return response()->json(['message' => 'Created Successfully'], 200);
    }
    
    return response()->json(['message' => 'Something went wrong'], 500);
    

    我仍在学习收藏,如有任何建议,不胜感激。谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   nmfzone    8 年前

    数据来自 $request (form)不是集合。这是一个数组。如果需要将其转换为集合,则应首先将其转换为集合。

    附言 . 如果在一个方法中有多个DB操作,最好有DB事务。

    \DB::transaction(function () use ($request) {
        // convert it to collection
        $users = collect($request->users);
    
        $team = Team::create([
            'name' => $request->name,
            'description' => $request->description,
            'unique_id' => str_random(),
        ]);
    
        $team->users()->attach($users->pluck('value')->toArray()); 
    });
    
    // HTTP Created is 201 not 200
    return response()->json(['message' => 'Created Successfully'], 201);
    

    或者你需要这样的东西:

    return \DB::transaction(function () use ($request) {
        $users = collect($request->users);
    
        $team = Team::create([
            'name' => $request->name,
            'description' => $request->description,
            'unique_id' => str_random(),
        ]);
    
        $team->users()->attach($users->pluck('value')->toArray());
    
        return response()->json([
            'message' => 'Created Successfully',
            'data' => $team,
        ], 201); 
    });
    
        2
  •  1
  •   Christopher Francisco    8 年前

    我只想通过laravel集合从用户数组中获取值键

    只需使用 map 然后:

    $userIds = $request->users->map(function($user) {
        return $user->value;  // or $user['value'] ? not sure if this is an array
    });
    

    编辑:

    如果 $request->users 不是集合,请在调用map之前将其设置为集合:

    $users = collect($request->users);
    
    $userIds = $users->map(function($user) {
        return $user->value;  // or $user['value'] ? not sure if this is an array
    });