Laravel 定义查询的地方
Laravel where define query
我是 Laravel 的新手,我想知道从数据库中定义查询 table 的函数的正确位置在哪里。在模型中还是在控制器中?
示例:
public function insertUser($firstname, $lastname, $email) {
$user = new User();
$user->firstname = $firstname;
$user->lastname = $lastname;
$user->email = $email;
$user->save();
return $user;
}
上面的函数我应该在哪里声明?模型还是控制器?
编辑:
例如:我需要创建一个 return 居住在美国的男性作者及其书籍的功能。我定义了使用 Author (Model) 的 AuthorController。定义此功能的正确方法是什么?我在我的控制器中编写了一个接受性别和国家作为参数的函数,例如:
public function getAuthoursByGenderAndNation($gender, $nation) {
$authors = Author::with("books")->where("gender", "=", $gender)->where("nation", "=", $nation)->get();
return $authors;
}
或者我定义一个通用函数,return 将所有作者和他们的书联系起来,然后在调用此通用函数的函数上应用 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;
}
您提到的功能应该在控制器中使用。我建议您在深入研究 Laravel.
之前先了解 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());
}
}
这就是您可以使用 $fillable 属性直接将数据填充到您的用户模型的方法
$fillable= ['name','email','password'];
如果您根据 Eloquent 的约定定义您的模型,您可以简单地使用内置的 Eloquent 方法来插入您的用户,如文档中所示。
https://laravel.com/docs/5.3/eloquent#inserting-and-updating-models
您问题的范围更广:'where to define functions that query the DB table'。
我建议通常在模型上定义这些,并希望利用 Eloquent 提供的结构,例如在模型上定义范围查询。
然后控制器中的代码将调用模型上的方法,例如。
Model::create();
您似乎也在尝试插入用户。我强烈建议您考虑使用 Laravel 的内置身份验证结构。你会发现这些非常强大。
https://laravel.com/docs/5.3/authentication
希望这有助于您入门。
请记住,所有应用程序逻辑都应该在控制器中,所有数据操作都应该在模型中。在你的问题中插入用户是一个应用程序逻辑,所以你应该把它放在控制器上,但如果你想定义数据的管理方式,请将该方法放在模型中。例如,您希望模型能够检索具有某些条件的集合,可能是只有女性的用户,因此您可以通过 Modell::getFemale()
访问它
我是 Laravel 的新手,我想知道从数据库中定义查询 table 的函数的正确位置在哪里。在模型中还是在控制器中?
示例:
public function insertUser($firstname, $lastname, $email) {
$user = new User();
$user->firstname = $firstname;
$user->lastname = $lastname;
$user->email = $email;
$user->save();
return $user;
}
上面的函数我应该在哪里声明?模型还是控制器?
编辑:
例如:我需要创建一个 return 居住在美国的男性作者及其书籍的功能。我定义了使用 Author (Model) 的 AuthorController。定义此功能的正确方法是什么?我在我的控制器中编写了一个接受性别和国家作为参数的函数,例如:
public function getAuthoursByGenderAndNation($gender, $nation) {
$authors = Author::with("books")->where("gender", "=", $gender)->where("nation", "=", $nation)->get();
return $authors;
}
或者我定义一个通用函数,return 将所有作者和他们的书联系起来,然后在调用此通用函数的函数上应用 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;
}
您提到的功能应该在控制器中使用。我建议您在深入研究 Laravel.
之前先了解 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());
}
}
这就是您可以使用 $fillable 属性直接将数据填充到您的用户模型的方法
$fillable= ['name','email','password'];
如果您根据 Eloquent 的约定定义您的模型,您可以简单地使用内置的 Eloquent 方法来插入您的用户,如文档中所示。 https://laravel.com/docs/5.3/eloquent#inserting-and-updating-models
您问题的范围更广:'where to define functions that query the DB table'。
我建议通常在模型上定义这些,并希望利用 Eloquent 提供的结构,例如在模型上定义范围查询。
然后控制器中的代码将调用模型上的方法,例如。
Model::create();
您似乎也在尝试插入用户。我强烈建议您考虑使用 Laravel 的内置身份验证结构。你会发现这些非常强大。 https://laravel.com/docs/5.3/authentication
希望这有助于您入门。
请记住,所有应用程序逻辑都应该在控制器中,所有数据操作都应该在模型中。在你的问题中插入用户是一个应用程序逻辑,所以你应该把它放在控制器上,但如果你想定义数据的管理方式,请将该方法放在模型中。例如,您希望模型能够检索具有某些条件的集合,可能是只有女性的用户,因此您可以通过 Modell::getFemale()