Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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_Eloquent_Laravel 5.3 - Fatal编程技术网

Php Laravel何处定义查询

Php Laravel何处定义查询,php,laravel,eloquent,laravel-5.3,Php,Laravel,Eloquent,Laravel 5.3,我是Laravel的新手,我想知道定义从DB查询表的函数的正确位置在哪里。在模型中还是在控制器中 例子: 上面的函数应该在哪里声明?模型还是控制器 编辑: 例如:我需要创建一个函数,返回居住在美国的男性作者及其书籍。我定义了使用Author(Model)的AuthorController。定义这个函数的正确方法是什么?我在控制器中编写一个函数,接受性别和国家作为参数,如: public function getAuthoursByGenderAndNation($gender, $nat

我是Laravel的新手,我想知道定义从DB查询表的函数的正确位置在哪里。在模型中还是在控制器中

例子: 上面的函数应该在哪里声明?模型还是控制器

编辑: 例如:我需要创建一个函数,返回居住在美国的男性作者及其书籍。我定义了使用Author(Model)的AuthorController。定义这个函数的正确方法是什么?我在控制器中编写一个函数,接受性别和国家作为参数,如:

    public function getAuthoursByGenderAndNation($gender, $nation) {
          $authors = Author::with("books")->where("gender", "=", $gender)->where("nation", "=", $nation)->get();

          return $authors;
    }
或者我定义一个泛型函数,它返回所有作者及其书籍,然后对调用该泛型函数的函数应用where子句?比如:

 public function showAuthors(Request $request) {
        $gender = $request->get("gender");
        $nation = $request->get("nation");

        $authors = $this->getAuthors()->where("gender", "=", $gender)->where("nation", "=", $nation)->get();

        return view("authors", ["authors" => $authors]);
    }

    public function getAuthors() {
        $authors = Author::with("books");

        return $authors;
    }

您提到的功能应该在控制器中使用。我建议你在去拉雷维尔之前先了解一下MVC是如何工作的

可能对你有用的阅读


根据MCV建议。 M(模型)应该是胖的,C(控制器)应该是瘦的。 您应该在模型中编写所有与数据库事务相关的代码。甚至可以为数据库查询创建存储库。 您的控制器应该是瘦的,所以您应该只在那里编写逻辑代码,比如调用模型函数。 例如:

UserController.php

<?php 

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

class UserController extent Controller {
    use App\User;
    protected $_user;
    public function __construct(User $user) {
        $this->_user= $user;
    }

    function saveUser(Request $request) {
        $user->fill($request->all());
        $user->save();

//     or you can directly save by $user->create($request->all());  

    }
}

如果您按照Eloquent的约定定义模型,您可以简单地使用内置的Eloquent方法插入用户,如文档中所示。

在您问题的更广泛范围中:“在何处定义查询DB表的函数”。 我建议通常在模型上定义这些,并希望利用Elount提供的结构,例如在模型上定义作用域查询。 然后,控制器中的代码将调用模型上的方法。
Model::create()

您似乎还在尝试插入用户。我强烈建议您考虑使用Laravel的内置身份验证结构。你会发现这些功能非常强大。


希望这能帮助您入门。

请记住,所有应用程序逻辑都应该在控制器中,所有数据操作都应该在模型中。在您的问题中,insert user是一个应用程序逻辑,所以您应该将其放在控制器上,但若您想定义如何管理数据,请将该方法放在模型中。例如,您希望模型能够检索具有某些条件的集合,可能是女性用户,因此您可以通过
Modell::getFemale()

访问该集合。在开始实施之前,您应该阅读模型视图控制器方法。在控制器中,请阅读手册。我阅读了您发布的文档,但我不明白一件事:在控制器通用函数中定义不接受请求作为参数是否正确?例如,如果我的控制器中有一个函数从另一个控制器调用函数,我应该在第一个控制器中准备一个请求并将其传递给我调用的函数,或者我也可以定义一个具有单个参数的函数?我知道这两种方法都是可能的,但是什么是最佳实践呢?好的,最佳实践似乎是第二种。如果你能举个例子,说明你在最初的职位上到底想要达到什么,我可以尝试进一步指导你。控制器应该是告诉您的数据要做什么的控制器(例如:用户需要被删除,因此控制器指示模型删除该用户)。我编辑了上面的问题,在这里我可以更好地解释我自己。
<?php 

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

class UserController extent Controller {
    use App\User;
    protected $_user;
    public function __construct(User $user) {
        $this->_user= $user;
    }

    function saveUser(Request $request) {
        $user->fill($request->all());
        $user->save();

//     or you can directly save by $user->create($request->all());  

    }
}
$fillable= ['name','email','password'];