我是Laravel的新手,我想知道在哪里定义从DB查询表的函数的正确位置。在模型或控制器中?
public function insertUser($firstname, $lastname, $email) {
$user = new User();
$user->firstname = $firstname;
$user->lastname = $lastname;
$user->email = $email;
$user->save();
return $user;
}
上面我应该申报的功能?型号或控制器?
例如:我需要创建一个函数来返回居住在美国的男性作者及其书籍。我定义了使用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;
}
答案 0 :(得分:1)
请记住,所有应用程序逻辑都应该在控制器中,并且所有数据操作都应该在模型中。在您的问题中,插入用户是应用程序逻辑,因此您应该将其放在控制器上,但如果要定义数据的管理方式,请将该方法放在模型中。例如,您希望模型能够检索具有某种条件的集合,可能只是具有女性性别的用户,因此您可以通过Modell::getFemale()
答案 1 :(得分:0)
答案 2 :(得分:0)
根据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'];
答案 3 :(得分:0)
如果您根据Eloquent的惯例定义模型,您可以使用内置的Eloquent方法插入您的用户,如文档中所示。 https://laravel.com/docs/5.3/eloquent#inserting-and-updating-models
在您的问题的更广泛范围内:'在哪里定义查询数据库表的函数'。
我建议通常在模型上定义这些并希望利用Eloquent提供的结构,例如在模型上定义范围查询。
然后,控制器中的代码将调用模型上的方法,例如。
Model::create();
您似乎也在尝试插入用户。我强烈建议您考虑使用Laravel内置的身份验证结构。你会发现这些非常强大。 https://laravel.com/docs/5.3/authentication
希望这有助于您入门。