【问题标题】:Laravel Policy with repository pattern具有存储库模式的 Laravel 策略
【发布时间】:2021-04-18 12:41:15
【问题描述】:

我在我的 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 函数获取模型时,第二个是在执行删除函数时。 这是这个函数的定义

//repository function
public function delete($id)
{
    return $this->find($id)->delete();
}

请注意,我知道为什么要执行 2 个相同的查询。我的问题是如何避免在使用策略和存储库模式时发生这种情况?

我应该将模型传递给我的存储库中的删除功能,因此存储库删除功能将是

//new delete function i my repository class
public function delete($model)
{
   return $model->delete();
}

谢谢

【问题讨论】:

    标签: laravel repository-pattern policy


    【解决方案1】:

    在控制器中:

    public function destroy(Link $link)
        {
            $this->authorize('delete', $link);
            $this->repository->delete($link);
    
            return back()->with('success', 'Item has been removed');
        }
    

    可以,在repository的delete函数中可以直接写$model->delete(); 这会将您的 2 个选择查询减少到 1 个。

    【讨论】:

    • 感谢您的重播,您是否建议在具有存储库 aproche 的控制器中使用具有删除方法的 depandancy 注入?在您的场景中,我将不得不使用存储库和模型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多