如果关系项不在 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();
我在 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();