如果关系项不在 Laravel 中的请求中,则将其删除

Deleting a relational item if it's not in the request in Laravel

我在 Laravel 中有一个引用,其中表单有添加和删除按钮(表单转发器)。我的问题是,如果我在更新报价时删除了一个项目,它不会删除链接到数据库中不属于保存请求一部分的报价的项目,而只会将该项目存储在数据库中。这是我在编辑表单时 运行 保存的查询:

foreach (request('quoteItems') as $quoteItem => $item) {
          $assignedItem = QuoteItems::where('id',$quoteItem)->first();
          $assignedItem->id = $item['id'];
          $assignedItem->price = $item['price'];
          $assignedItem->cost = $item['cost'];

          if (QuoteItems::where('quote_id', $quote->id)->where('id', $item['id'])) {
            $assignedItem->save();
          } else {
            QuoteItems::where('quote_id', $id)->delete();
          }
        } 

我知道这可以通过使用枢轴方法来解决,但是枢轴的问题是相同的外键项(在本例中为 QuoteItem)不能在引号中添加两次,这是我绝对需要能够做到的去做。我不明白我的查询有什么问题,因为理论上它应该删除不在请求中的项目。更新保存很好,但删除的项目不会删除。

如果有人能帮助我,我将不胜感激。

我认为您想删除不在请求中的报价项目。

所以你可能想做这样的事情:

foreach (request('quoteItems') as $quoteItem => $item) {
    $assignedItem = QuoteItems::where('id',$quoteItem)->first();
    $assignedItem->id = $item['id'];
    $assignedItem->price = $item['price'];
    $assignedItem->cost = $item['cost'];
    $assignedItem->save();
}

QuoteItems::where('quote_id', $quote->id)
    ->whereNotIn('id', array_keys(request('quoteItems')))
    ->get()
    ->each
    ->delete();