我在产品和用户模型之间存在多对多关系,我正在尝试实例化用户和特定产品之间的一种关系,或者更新它的“favoris”列(如果它已经存在)。
我不确定我是否使用了适当的方法。
<?php
namespace App\Http\Controllers;
use App\Http\Middleware\Authenticate;
use App\Models\Product;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class StatisticsController extends Controller
{
public function favoris(Request $request){
$user=Auth::user();
$list_prods_fav_true=[];
$favs=$request->input('favoris');
Log::info($favs);
$list_favoris=collect();
$list_unfavoris=collect();
$message='';
try{
foreach ($favs as $fav) {
$prod= $fav['produit'];
try{
$product=Product::find($prod["id"]);
if(!$product){
$product=Product::create(
[
'id'=>$prod["id"],
'nom'=>$prod["nom"],
'description'=>$prod["description"],
'img'=>$prod["img"]
]
);}
$nbre_lignes_updated=$user->products()->updateExistingPivot(
$prod->id,['favoris'=>true]
);
if($nbre_lignes_updated===0){
Log::info('update '.$nbre_lignes_updated);
$user->products()->syncWithoutDetaching([$prod->id=>['favoris'=>true]]);
}
array_push($list_prods_fav_true,$prod['id']);
}
catch(Exception $e){
$message=$e;
}
/*
$product->updateExistingPivot($prod['id'],['favoris'=>true]);
*/
$list_prods_fav_false=$user->products->diff(Product::whereIn('id',$list_prods_fav_true)->get());
foreach($list_prods_fav_false as $prod){
$nbre_lignes_updated=$user->products()->updateExistingPivot(
$prod->id,['favoris'=>false]
);
if($nbre_lignes_updated===0){
Log::info('upadte '.$nbre_lignes_updated);
$user->products()->syncWithoutDetaching([$prod->id=>['favoris'=>false]]);
}
else{
Log::info('update',$nbre_lignes_updated);
}
}
$list_favoris=$user->products()->wherePivot('favoris',true)->get();
$list_unfavoris=$user->products()->wherePivot('favoris',false)->get();
}}
catch(Exception $e){
$message=$e;;
}
return response()->json([
'message'=>'liste des favoris est bien recue '. $message,
'liste des favoris'=>$list_favoris,
'liste des unfavoris'=>$list_unfavoris,
]);
}
}
结果始终是 list_favoris 的一个空数组,那就是我添加 updateExistingPivot 时,在我仅使用syncWithoutDetaching之前,每次我将一个产品添加到收藏夹时,它都会创建最多 4 个关系对象。
仍然不知道为什么每次我将一个产品添加到收藏夹时,syncWithoutDetaching 都会创建最多 4 个关系对象。 但是,我在当前代码中遇到的问题 -> 从 $prod 希望恢复 id 的值来自 React 。 我必须尝试使用 $prod['id'] 或 $product->id,而 $product 是一个 php 对象。