laravel eloquent 使用 ID 数组更新 hasmany

laravel eloquent update hasmany with array of ids

我需要更新 HasMany 与一组 ID 的关系。

常见问题模型。

class Faq extends Model
{
   public function products(){
        return $this->belongsToMany(Product::class, 'faq_products');
   }
}

我有 Product 模型和枢轴 table 'faq_products' HasMany 关系。

faq_products table

    Schema::create('faq_products', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('faq_id')->unsigned()->nullable();
        $table->foreign('faq_id')->references('id')->on('faqs')->onDelete('cascade');
        $table->integer('product_id')->unsigned()->nullable();
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->timestamps();
    });

我从与常见问题解答相关的请求中获取了一组产品 ID,但不确定如何更新关系。

数组

$product_ids = [4, 3, 2];

我敢打赌,attach() 您要找的是:

class FaqController extends Controller
{
    public function update(Request $request)
    {
        $faq = Faq::findOrFail($request->input('faq_id');
        //attached products [4,5,6]
        $faq->products()->attach($request->input('product_ids')); // [4, 3, 2];
        //attached products [2,3,4,5,6]
    }
}

如果您之前附加了其他产品(例如 id = 4、5 和 6)并且想要在附加 4、3 和 2 时删除它们;使用 sync() 而不是附加

//attached products [4,5,6]
$faq->products()->sync($request->input('product_ids')); // product_ids = [4,3,2]
//attached products [4,3,2]