具有存储库模式的Laravel策略

具有存储库模式的Laravel策略,laravel,repository-pattern,Laravel,Repository Pattern,我正在我的Laravel应用程序中使用存储库模式。 我的问题与处理存储库和策略模式时重复的SQL查询有关。这里有一些例子 // My Controller public function destroy($id) { $this->authorize('delete', $this->repository->find($id)); $this->repository->delete($id); return back()->with(

我正在我的Laravel应用程序中使用存储库模式。 我的问题与处理存储库和策略模式时重复的SQL查询有关。这里有一些例子

// My Controller
public function destroy($id)
{
    $this->authorize('delete', $this->repository->find($id));
    $this->repository->delete($id);

    return back()->with('success', 'Item has been removed');
}
执行上述函数将运行2个完全相同的“选择”查询。 首先,在获取
authorize
函数的模型时,以及在执行delete函数时获取第二个模型时。 下面是此函数的定义

//repository function
public function delete($id)
{
    return $this->find($id)->delete();
}
请注意,我知道为什么会执行两个相同的查询。我的问题是,在使用策略和存储库模式时,如何避免这种情况发生

我是否应该将模型传递给我的存储库中的delete函数,以便存储库删除函数

//new delete function i my repository class
public function delete($model)
{
   return $model->delete();
}
感谢控制器中的您

public function destroy(Link $link)
    {
        $this->authorize('delete', $link);
        $this->repository->delete($link);

        return back()->with('success', 'Item has been removed');
    }
是的,在存储库的删除功能中,您可以直接编写$model->delete();
这将使您的2个select查询减少到1个。

感谢您的重播,您是否建议在控制器中使用DEPANDANCE INPURCE with delete方法并使用存储库路径?在您的场景中,我必须使用存储库和模型