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