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 的工作原理

可能对你有用的阅读

MVC Concept

Laravel Docs

PHP MVC Tutorial

根据 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()

访问它