【问题标题】:Model Collection not refreshed after attach or detach (many to many) in Laravel Livewire在 Laravel Livewire 中附加或分离(多对多)后模型集合未刷新
【发布时间】:2022-11-07 04:24:13
【问题描述】:

在 Laravel livewire 上分离后,我在刷新模型集合时遇到了问题。我想在不刷新整个页面的情况下从视图中删除分离的项目,但它似乎不起作用。它需要刷新整个页面才能重新呈现视图。我在detach() 之后尝试了$model->refresh(),它的工作但是$model->refresh() 重复已经加载的关系查询。 这里的路线:

Route::get('/order/{order}', function (Order $order) {
    $order = $order->load(['worklist.khs:id,mou_id,worklist_id,khs', 'worklist.category:id,category', 'materials']);
    return view('livewire.order.index-order',  ['order' => $order]);
})->name('view.order');

活线组件:

class ViewOrder extends Component
{
    public Order $order;
    public function delete($id)
    {
        $work = Worklist::find($id);
        $this->order->worklist()->detach($work);
        $this->order->refresh();  //refreshed, but relationship query duplicated
        $this->tempTotal();
    }

public function render()
    {
        return view('livewire.order.view-order', ['worklist' => $this->order->worklist]);
    }
{

使用$model->refresh()时重复查询的截图:

是否有任何解决方法来刷新关系集合而不刷新整页或使用$model->refresh() 刷新而不重复查询? 谢谢

【问题讨论】:

    标签: php laravel laravel-livewire


    【解决方案1】:

    我认为您正在硬刷新整个订单对象,包括其所有急切加载的关系。当您刷新工作清单时,您可以保存查询。

        public function delete($id)
        {
            $work = Worklist::find($id);
            $this->order->worklist()->detach($work);
            $this->order->worklist()->refresh();
            $this->tempTotal();
        }
    

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 2020-06-09
      • 2018-07-10
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多