目前我在 Laravel 5.5
雄辩中有3个模型产品
PRODUCT_CATEGORY
分类
让我们说我在所有这些模型中都有一些记录。 Product_Category的当前状态将如下所示:
id | category_id | product_id
-----------------------------
5 | 2 | 2
6 | 3 | 3
7 | 4 | 1
现在我将运行以下函数来使用Eloquent更新我的记录:
public function updateObject($request, $id){
$model = Product_Category::find($id);
foreach($request->except('_token', 'categories') as $key=>$value){
$model->setAttribute($key, $value);
}
$model->save();
$model->id;
foreach($request->only('categories') as $key=>$value){
foreach($value as $category) {
$product_category = Product_Category::where(['category_id' => $category["id"], 'product_id' => $model->id])->first();
if($product_category == null) {
$product_category = new Product_Category();
$product_category->category_id = $category["id"];
$product_category->product_id = $model->id;
} else {
$product_category->category_id = $category["id"];
$product_category->product_id = $model->id;
}
$product_category->save();
}
}
}
如果符合以下条件,此功能可以正常工作:
如果符合以下条件,则此功能无效:
我的问题:当我从表Product_Category中编辑类别时,如果我的类别比之前少,那么我将保留之前列出的旧ID,但这些需要删除。
我的问题:我该如何解决这个问题?因此表Product_Category将始终仅使用数组中的最新ID进行更新
我在执行该功能之前已经考虑过删除,但不确定这是否是" Eloquent方式"
答案 0 :(得分:1)
雄辩的方法是分离记录https://laravel.com/docs/5.5/eloquent-relationships
$user->roles()->detach($roleId);
答案 1 :(得分:0)
从上述结构来看,似乎类别和类别之间的关系是多对多的。产品
正确的雄辩结构将是:
Illuminate\Database\QueryException]
could not find driver (SQL: select * from information_schema.tables where table_schema = test and table_name = migrations)
[PDOException]
could not find driver
public function products()
{
return $this->belongsToMany(Product::class)->using(Product_Category::class);
}
以下代码应写在public function categories()
{
return $this->belongsToMany(Category::class)->using(Product_Category::class);
}
模型中:
Product_Category
答案 2 :(得分:0)
我必须使用Laravel Sync方法。
foreach($request->only('categories') as $key=>$value) {
$sync_data = [];
for ($i = 0; $i < count($value); $i++) {
$sync_data[$value[$i]["id"]] = ["product_id" => $model->id];
}
$model->categories()->sync($sync_data);
}
这将从Product_Category表中删除所有未使用的记录。并编辑相应的记录。