Laravel从DB获取数据的最佳实践

时间:2017-09-19 15:08:32

标签: php laravel

我对从DB获取数据的最佳方式感到困惑。我有这个控制器(任务)从任务模型获得每个客户的任务。获取这些数据的最佳方法是什么?

1°示例

在这个例子中,我有一个连接表(Task和Companies)的“通用”函数(getTasksCompany)。 showTasks调用此函数,然后使用where子句获取客户代码= 000001

的仅任务
display:none;

2°示例

在这个例子中,我有一个“特定”函数,它从传递的参数中的代码中获取任务。

    public function showTasks() {
            $tasks = $this->getTasksCompany()->where("company_code", "=", "000001")->get();

            dd($tasks);
        }

public function getTasksCompany() {
        $tasks = Task::join("companies AS c", "c.code", "=", "company_code");

        return $tasks;
    }

3°示例

在这个例子中,我有一个连接表(任务和公司)的“通用”功能(getTasksCompany),我使用任务模型中定义的范围来过滤任务。

public function showTasks2() {
        $tasks = $this->getTasksFromCompany("000001");

        dd($tasks);
    }

public function getTasksFromCompany($company_code) {
        $tasks = Task::join("companies AS c", "c.code", "=", "company_code")->where("company_code", "=", $company_code)->get();

        return $tasks;
    }

我的问题是,做什么是好的做法?为什么?

2 个答案:

答案 0 :(得分:1)

我建议您彻底研究雄辩和查询构建器,这就是最佳实践。

如果正确使用eloquent with query builder,则不需要其他函数来获取所需的数据。

答案 1 :(得分:1)

根据我的理解,要求最佳实践会吸引固执的答案,因为您使用Laravel,我会尽可能地尝试使用它提供的功能。

虽然我更喜欢第三个示例而不是其他示例,因为使用模型scope有助于从模型实例创建和绑定查询构建器。当您重复使用此功能时,这将使事情变得更容易。

这意味着您不需要静态调用任何查询构建器方法,因为它们首先绑定到初始模型。

如果我要做上述操作的一个例子,我只会使用模型关系来处理我的joins

//Company model
public function scopeShowTask($company_code = "000001")
{
    return $this->tasks()->where("company_code", "=", $company_code);
}

public function tasks()
{
    return $this->hasMany(Task::class, 'company_code', 'code');
}

使用此方法有助于根据任务和公司之间的关系构建查询。为了理解其工作原理,您应该查看Eloquent Relationship

使用此方法的一个巨大优势是,当您以这种方式在模型中声明关系时,您可以轻松利用laravel提供的各种方法。要查看其中一些内容,您可以查看Querying relationship

  PS:最佳实践,不,也许只是一种更好的做法。此答案可向更新

开放