laravel create не будет хранить первую строку массива данных

#php #laravel

Вопрос:

У меня есть опции выбора в моей форме, где она имеет первую строку, когда страница загружается, и пользователи могут добавлять больше строк с помощью AJAX и хранить все данные строк сразу.

Проблема в том, что моя первая строка (которая видна при загрузке страницы) не сохраняет данные, в то время как все остальные добавленные строки будут сохранены.

Вот скриншот моих выбранных параметров при загрузке страницы:

выбранные параметры

И вот он, когда пользователь добавляет новые строки:

объяснение визуального взаимодействия

Вот мои примерные данные, которые эти строки отправили контроллеру (снимок экрана #2):

 array:2 [▼
  0 => array:3 [▼
    "name" => "ali"
    "username" => "alireza"
    "action" => "delete"
  ]
  1 => array:3 [▼
    "name" => "eraty"
    "username" => "aery"
    "action" => "optional"
  ]
]
 

Как я объяснил на своих скриншотах, данные объекта 0 не будут храниться в базе данных, не знаю почему.

Вот мой контроллер:

 public function update(Request $request, $id)
{
    $this->validate($request, [
        'note' => 'required|string',
    ]);

    $post = Post::where('id', $id)
        ->where('user_id', Auth::id())
        ->first();

    $post->user_id = Auth::id();
    $post->note = $request->input('note');

    if ($post->save()) {
        // social media  (add new)
        $socialHeir = $request->input('social_media_heir');
        $socialAction = $request->input('social_media_action');
        $socialNames = $request->input('social_media_name');
        $socialUsernames = $request->input('social_media_username');
        if (!empty($socialNames)) {
            $result_array = [];
            foreach ($socialNames as $key => $val) {
                $result_array[$key] = [
                    'name' => $socialNames[$key],
                    'username' => $socialUsernames[$key],
                    'action' => $socialAction[$key]
                ];
            }

            // dd($result_array); <-- result of this line I shared above (after screenshot 2)

            foreach ($result_array as $key => $merge) {
                if (!empty($key) amp;amp; !empty($merge)) {
                    SocialMedia::create([
                        'owner_id' => Auth::id(),
                        'heir_id' => $socialHeir,
                        'post_id' => $post->id,
                        'name' => $merge['name'],
                        'username' => $merge['username'],
                        'what_to_do' => $merge['action'],
                    ]);
                }
            }
        }
    }
    
    return redirect()->route('posts.index');
}
 

Обновить

SocialMedia Модель:

 protected $fillable = [
    'owner_id',
    'heir_id',
    'post_id',
    'name',
    'username',
    'what_to_do',
];

public function post()
{
    return $this->belongsTo(Post::class);
}
 

Post Модель

 protected $fillable = [
    'user_id',
    'note',
];

public function socialMedias()
{
    return $this->hasMany(SocialMedia::class);
}
 

Комментарии:

1. Пожалуйста, проверьте заполняемое свойство в вашей модели.

2. Введите код файла модели SocialMedia и код Post модели

3. @VikasKatariya обновлено

4. вы сдали protected $table = 'table'; экзамен по модели ??

5. Я уже решил эту проблему, большое вам спасибо

Ответ №1:

Решенный

Проблема была $key в моем foreach после его удаления, теперь он сохраняет все строки.

 foreach($result_array as $merge) {
    if(!empty($merge)) {
        SocialMedia::create([
            'owner_id' => Auth::id(),
            'heir_id' => $socialHeir,
            'post_id' => $will->id,
            'name' => $merge['name'],
            'username' => $merge['username'],
            'what_to_do' => $merge['action'],
        ]);
    }
}