Как вставить значения массива в базу данных с помощью laravel - PullRequest
1 голос
/ 09 мая 2019

У меня есть группа и члены группы. Одна таблица предназначена для группы, в которой я храню только имя группы, а вторая таблица - для членов группы, где у меня есть поле 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] в таблице group_members вполе user_id против group_id, если есть [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);
    }

Как я могу сохранить значения этого массива в базе данных, ваша помощь будет высоко оценена? enter image description here

               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);
    }
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Сделайте это с присоединением и отношением ко многим .

Group.php

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

User.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', []));
0 голосов
/ 09 мая 2019

Изменить эти две строки

$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]);
}

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...