Laravel在哪里定义查询

时间:2017-09-19 12:45:35

标签: php laravel eloquent laravel-5.3

我是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;
    }

4 个答案:

答案 0 :(得分:1)

请记住,所有应用程序逻辑都应该在控制器中,并且所有数据操作都应该在模型中。在您的问题中,插入用户是应用程序逻辑,因此您应该将其放在控制器上,但如果要定义数据的管理方式,请将该方法放在模型中。例如,您希望模型能够检索具有某种条件的集合,可能只是具有女性性别的用户,因此您可以通过Modell::getFemale()

访问它

答案 1 :(得分:0)

您提到的功能应该在控制器中使用。我建议您在Laravel潜水之前掌握MVC的工作原理。

阅读可能对您有用

MVC Concept

Laravel Docs

PHP MVC Tutorial

答案 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

希望这有助于您入门。