#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'],
]);
}
}