Как обновить и создать запросы? - PullRequest
0 голосов
/ 06 марта 2020

Идея состоит в том, что у меня есть категория и подкатегория, дизайн моего приложения:

enter image description here

Моя проблема с методом обновления при обновлении как subcategory1 и добавить новый через new input от jquery Я сделал это и нажал update, он не обновляет subcategory1 и не добавил новый!

Мой код контроллера:

public function update(Request $request, Category $category)
{
    $request->validate([
        'category' => 'required|string|unique:categories,category,' . $category->id,
    ]);

    $category->update($request->only('category'));

    if($request->has('subcategory')){
        foreach($request->subcategory as $sub){

            $category->update([
                'category'=>$sub,
                'parent_id'=>$category->id,
            ]);

        }
    }

    session()->flash('success', 'my message');
    return redirect()->route('category.index');
}

dd запрос:

    array:4 [▼
    "_token" => "K812zViGeSpu8w9mWJ1ze1J7R05fAWNyKKAOOsn3"
    "_method" => "put"
    "category" => "category"
    "subcategory" => array:4 [▼
        0 => "subcategory1"
        1 => "subcategory2"
        2 => "subcategory3"
        3 => "subcategory4"
    ]
]

Так что мне нужно, когда я обновляю уже существующее и, если есть какое-либо новое, также добавить его

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы ничего не создаете / не храните, поэтому новая подкатегория не может быть добавлена ​​так, как вы это сделали. Кроме того, в вашем foreach l oop вы обновляете $category, который является родительской категорией.

Если у вас нет идентификаторов в запросе текущих подкатегорий, то на самом деле нет способа их обновить. «Самым простым» решением было бы сначала удалить все подкатегории, а затем создать новые из запроса.

Это может выглядеть примерно так:

    $category->update($request->only('category'));

    if($request->has('subcategory')){
        Category::where('parent_id', $category->id)->delete();
        foreach($request->subcategory as $sub){
            Category::create([
                'category'=>$sub,
                'parent_id'=>$category->id,
            ]);

        }
    }

Лучший вариант в моем необходимо убедиться, что интерфейс имеет также идентификаторы подкатегорий, например, в атрибуте data каждого входа. Затем вы можете использовать эти данные и отправить их в массиве со значением ввода, чтобы вы могли обновить существующие подкатегории, вместо того чтобы удалять все подкатегории и каждый раз создавать новые.

0 голосов
/ 06 марта 2020

я думаю, что категория $ category эквивалентна $ category = Category :: findOrFail ($ id) -> first ();

в вашем коде получает экземпляр только одной категории и может обновить только одну category,

я думаю, что вы должны сначала получить массивы $ ids вместо категории $ category ..

Также обратите внимание, что вы можете использовать updateOrCreate метод laravel, который вы можете найти в документации

Однако я могу ошибаться, пожалуйста, исправьте меня, если неправильно понял проблему

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