【问题标题】:How to insert array values into database using laravel如何使用 laravel 将数组值插入数据库
【发布时间】:2019-09-26 22:43:08
【问题描述】:

我有组和组成员,一张表用于组,我只存储组名,第二张表是组成员,我有 user_id,group_id 字段。

我正在使用邮递员创建 API,我想插入这样的组成员详细信息:

"group_members": [1,3]

我的身体要求是:

{
    "name": "Steve", // name is group name
    "group_members": [1,3]  // [1,3] here 1 and 3 is user_id
}

我想将 [1,3] 存储到 user_id 字段中的 group_members 表中,如果有 [1,3],则应在 user_id 字段中输入两个条目 我还附上了我的桌子的屏幕截图:

我的控制器:

DB::beginTransaction();

    try{

        $request->request->add(['created_by' => Auth::user()->id]);
        $group = $this->group->create($request->only($this->group->getModel()->fillable));
        $request->request->add(['group_id' => $group->id]);
        $this->groupMembers->create($request->only($this->groupMembers->getModel()->fillable));

        DB::commit();

        return response([
            'status' => true,
            'message' => 'Group added',

        ], 200);

    } catch(\Exception $ex) {
        DB::rollback();
        return response([
            'status' => false,
            'message' => __('messages.validation_errors'),
            'errors' => $ex->getMessage(),
        ], 500);
    }

如何将此数组值存储到数据库中,我们将不胜感激?

               try {

        $group = $this->group->find($request->input('id'));
        $request->request->add(['updated_by' => Auth::user()->id]);
        $group->fill($request->all())->save();

        return response(['status' => true, 'message' => 'Group updated'], 500);

    } catch (\Exception $ex) {
        return response(['status' => false, 'message' => 'Validation Errors', 'errors' => $ex->getMessage()], 500);
    }





      public function updateGroup(Request $request)
    {
    $validator = UserValidations::validateGroup($request->all());

    if($validator->fails()) {
        return response(['status' => false, 'message' => 'Validation Errors', 'errors' => $validator->errors()->all()], 500);
    }

    try {

        $group = $this->group->find($request->input('id'));
        $request->request->add(['updated_by' => Auth::user()->id]);
        $group->fill($request->all())->save();

        return response(['status' => true, 'message' => 'Group updated'], 500);

    } catch (\Exception $ex) {
        return response(['status' => false, 'message' => 'Validation Errors', 'errors' => $ex->getMessage()], 500);
    }
}

【问题讨论】:

标签: php arrays database laravel


【解决方案1】:

使用attachmany to many 关系来实现。

Group.php

class Group extends Model
{
    public function users()
    {
        return $this->belongsToMany('App\User', 'group_members');
    }
}

用户.php

class User extends Model
{
    public function groups()
    {
        return $this->belongsToMany('App\Group', 'group_members');
    }
}

现在,您只需执行以下操作即可按 ID 将成员添加到组:

$group = Group::where('name', $request->get('name'))->first();
$group->users()->attach($request->get('group_members', []));

如果您想从组中删除一个或多个成员,也是如此:

$group->users()->detach($request->get('group_members', []));

【讨论】:

  • "调用未定义的方法 Illuminate\\Database\\Query\\Builder::findByName()"
  • 对不起,应该是Group::where('name', $request->get('name'))->first()
  • 当我想删除组成员时找不到方法分离
  • 实际上是detach 没有第二个t
  • 好的,我明白了,我会把这段代码放到我的更新方法中吗?我也用更新方法编辑了我的代码,你能看看并将你的答案编辑到我的代码中吗?
【解决方案2】:

改变这两行

$request->request->add(['group_id' => $group->id]);
$this->groupMembers->create($request->only($this->groupMembers->getModel()->fillable));

$user_ids = $request->get('group_members');
foreach($user_ids as $user_id){
    $this->groupMembers->create(['group_id' => $group->id, 'user_id'=>$user_id]);
}

希望这能解决您的问题。

【讨论】:

  • 谢谢它对我有帮助,还有一件事,如果我想在正文请求中使用相同的模式进行更新怎么办?
  • 我还分享了更新代码,我只是根据 id 更新名称,请查看我的编辑问题
  • 我刚刚分享的代码更新它只更新名称,但我想更新 group_members 以及我想更新 name 和 group_members 我会做 name = shahzad 和 group_members [4,5]来自 [1,3]
  • 我已经分享了整个更新方法请看一下
  • 就像我们在 add api 中添加组和组成员一样,我想使用相同的模式更新 name 和 group_members { "name": "Steve", "group_members": [1,3, 4] }
猜你喜欢
  • 2018-01-31
  • 2015-12-03
  • 2020-12-31
  • 2018-06-16
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多