Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中使用模型的正确方法是什么?_Php_Laravel_Opencart - Fatal编程技术网

Php 在Laravel中使用模型的正确方法是什么?

Php 在Laravel中使用模型的正确方法是什么?,php,laravel,opencart,Php,Laravel,Opencart,你能帮我吗?我目前正在自己学习拉威尔,我遵循了拉腊卡斯特的教程,这真是太棒了。在Laravel之前,我在我的项目中使用CodeIgniter和Opencart,我开始学习Laravel,因为我想学习一个新的框架 在CI和Opencart中,所有数据库查询都在模型中。但在Laravel中,您可以在Controller?中执行和查询?。这是在Laravel中处理查询的正确方法吗 我在控制器中有这样的代码: <?php namespace App\Http\Controllers; use A

你能帮我吗?我目前正在自己学习拉威尔,我遵循了拉腊卡斯特的教程,这真是太棒了。在Laravel之前,我在我的项目中使用CodeIgniter和Opencart,我开始学习Laravel,因为我想学习一个新的框架

在CI和Opencart中,所有数据库查询都在模型中。但在Laravel中,您可以在Controller?中执行和查询?。这是在Laravel中处理查询的正确方法吗

我在控制器中有这样的代码:

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Article;
use Illuminate\Http\Request;

class ArticlesController extends Controller {

    public function index() {

        $articles = Article::all();

        return view('articles.index')->with('articles', $articles);

    }

}

是的,这对于小型应用来说是非常好的。 但是,对于大型应用程序,我建议使用存储库,因为它们将您的模型与控制器分离,这使它们更具可读性和可测试性

您的ArticlesController将转换为以下内容:

public function __construct(ArticleRepository $articles)
{
    $this->articles = $articles;
}
对你来说,这是一个明智的决定。但是为什么呢? 基本上,存储库是应用程序和存储之间的“网关”。 使用存储库,您可以在单个位置找到“数据库查询”

让我们考虑一下模型文章。 您不必一直使用静态的文章实例,只需创建一个文章存储库即可。 将此回购注入控制器,例如,并使用存储在ArticleRepository中的“功能”

你什么意思? 让我们考虑一个文章库。我将在我的文章应用程序模型中多次使用什么?我需要全选,按id选择,插入,更新,删除。基本上就是这些“东西”。那么,如果我把这些东西都放在一个地方

class ArticleRepository {

    public function all(){}
    public function getById($id){}
    public function insert($data){}
    public function update($data){}
    public function delete($id){}

}
将此ArticleRepository注入控制器中。要执行此操作,请在此处阅读关于IoC容器的内容:

控制器中的构造如下所示:

public function __construct(ArticleRepository $articles)
{
    $this->articles = $articles;
}
总之,当您需要在控制器中获取所有文章时,只需执行以下操作:

public function index()
{
    $articles = $this->articles->all();
    return View::make('articles.index')->with(['articles' => $articles]);
}
通过这种实践,您将拥有一个干净的应用程序,该应用程序具有可测试的控制器和漂亮的组织和设计

听着,我尽可能地说教你理解这个概念。使用存储库不仅仅是一种方法。所以我让这些链接出现在评论中。还有其他参考资料。 我相信你很快就会明白的。 学习成功!:


如果你在laracasts有账户,请看下面这个:另一个:谢谢你对此的明确解释。我也会检查你的参考链接