目录
定义关系(热心方式)
经常询问有关Laravel模型的问题(常见问题解答)
Laravel 4.2、5.0、7.x和10.x雄辩之间的关键差异是什么?在Laravel 4.2中,雄辩是具有基本CRUD操作的简单ORM(对象相关映射)。 Laravel 5.0引入了新功能,例如多个连接,软删除和事件处理。 Laravel 7.x带来了急切的负载,模型序列化和API资源。 Laravel 10.x通过提高性能,更好的错误处理以及诸如批处理操作和模型工厂之类的高级功能进一步增强了雄辩。
>我如何在Laravel雄辩中使用多个连接?数据库连接通过在您的config/database.php文件中定义它们。然后,在雄辩的模型中,您可以指定用于$ Connection属性的连接。例如,受保护$ Connection ='mysql2';使用“ mySQL2”连接。
laravel雄辩中的急切加载是什么?在使用大型数据集时,这可以显着提高性能。您可以在雄辩中使用with with()方法来指定与急切的负载的关系。
>如何在Laravel雄辩中使用API​​资源?
API资源在Laravel雄辩中允许您将模型和模型集合转换为JSON格式,以用于API中。您可以创建一个资源类,该类别定义应该如何转换模型,然后从API路由返回该资源类的实例。
首页 后端开发 php教程 热心:类固醇上的Laravel模型

热心:类固醇上的Laravel模型

Feb 19, 2025 am 09:07 AM

Ardent: Laravel Models on Steroids

热心:类固醇上的Laravel模型

>我不喜欢Laravel的(几件)事情之一是,您无法轻松地将验证代码从控制器移动到模型。当我编写软件时,我喜欢应用“脂肪模型,瘦控制器”原理。因此,对我而言,在控制器中编写验证代码不是一件好事。

> 为了解决这个问题,我想介绍Ardent,这是Laravel 4的绝佳包装。更确切地说,Ardent将自己作为“为Laravel Framework 4的雄辩的Orm Orm的自我验证的智能模型)。换句话说:正是我们需要的!

> 您可以想象,这基本上是雄辩的模型类的扩展。该软件包带有一些新功能,实用程序和方法,用于输入验证和其他小事情。

钥匙要点

增强验证:Ardent通过允许在模型中直接定义规则,增强代码组织和可维护性,尤其是在较大的项目中,简化了验证过程。
    模型自动水合物:此功能自动从表单输入中填充模型属性,减少控制器中的样板代码并使代码库清洁器和更有效。
  • 模型钩:Ardent引入了模型钩,这些钩子是在特定的生命周期时刻执行的方法,例如保存之前和之后,提供了对数据处理的更大控制。
  • >
  • >简化的关系:使用简单的数组结构('$ restanctdata`)更加精简模型关系,从而降低了Laravel模型中关系管理的复杂性。
  • >自动清除冗余数据:Ardent可以自动从输入(例如确认字段或CSRF代币)中丢弃不必要的数据,以确保仅处理和存储相关数据。
  • >>>>>
  • 我们的测试应用程序
  • 为了更好地理解您在使用Ardent时可以享受的优势,我们将设置一些测试应用程序。没什么复杂的:一个简单的待办事项列表应用程序。
当然,我不会实现一个完整的应用程序:我只想解释一些原则,因此我将制作一些控制器和模型 - 没有意见。之后,我将使用Ardent“翻译”代码。

>

我们的待办事项列表将计算两个不同的实体:

>用户

    ID
  • > first_name

      last_name
    • 电子邮件
    • password
    • >
    • 任务
  • ID
  • >名称

      >状态(完成 /未完成)
    • >
    • 一个真正的基本项目。但是,如果您不想编写代码,请不要担心:我已经准备了一个可以用来生成数据库的迁移。使用它!
    使用命令
  • 创建迁移文件

然后,用此代码填充文件:>

php artisan migrate:make todo_setup
登录后复制
登录后复制
登录后复制

>现在我们有了桌子。是时候创建我们的模型了。即使在这里,我们也有很少的行写。这是用户模型(也是默认的模型)。

>
<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
</span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
</span></span><span>
</span><span>    <span>class TodoSetup extends Migration {
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Run the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function up()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id')->unsigned();
</span></span><span>
</span><span>                <span>$table->string('first_name');
</span></span><span>                <span>$table->string('last_name');
</span></span><span>                <span>$table->string('email');
</span></span><span>                <span>$table->string('password', 60);
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>            <span>});
</span></span><span>
</span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id');
</span></span><span>
</span><span>                <span>$table->string('name');
</span></span><span>                <span>$table->boolean('status');
</span></span><span>
</span><span>                <span>$table->integer('user_id')->unsigned();
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>
</span><span>                <span>$table->index('user_id');
</span></span><span>            <span>});
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Reverse the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function down()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
</span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

我刚刚添加了任务方法来描述与任务模型的关系。>

<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
</span></span><span>
</span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
</span></span><span>
</span><span>        <span>use UserTrait, RemindableTrait;
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The database table used by the model.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>string</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $table = 'users';
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The attributes excluded from the model's JSON form.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>array</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $hidden = array('password', 'remember_token');
</span></span><span>
</span><span>        <span>public function tasks()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->hasMany('Task');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制
我们只是提出了起点。从现在开始,安装后,我们将看到两种不同的情况:首先,代码的“正常”版本而没有热心。此后,我们将与“改进”版本进行比较。您会注意到区别,相信我。

>让我们开始!

>安装Ardent

作曲家安装热心非常容易。只需将依赖项添加到您项目的composer.json文件中。

>

然后,在更新后,您只需要在模型中扩展热心类:

<span><span><?php
</span></span><span>
</span><span>    <span>class Task extends <span>\Eloquent</span> {
</span></span><span>        <span>protected $fillable = [];
</span></span><span>
</span><span>        <span>public function user()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->belongsTo('User');
</span></span><span>        <span>}
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

…然后您准备出发!

>
<span>{
</span>        <span>"require": {
</span>            <span>"laravelbook/ardent": "2.*"
</span>        <span>}
</span>    <span>}</span>
登录后复制
登录后复制
登录后复制
数据验证

>要做的第一件事是分析热心如何使我们的生活更轻松地实施验证。我们已经知道如何使用Laravel做到这一点。让我们以一个典型的示例:将处理从表格中的数据来处理的帖子方法。

> 在“正常”情况下,我们会做这样的事情:

>

... ardent呢?

>

>热心,事情有些变化。首先,您可以轻松地想象,验证规则将直接移动到模型中:我们将在这里启动“ Restyle”。因此,打开模型文件并像这样更改:
<span><span><?php
</span></span><span>    <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> {
</span></span><span>        <span>// model code here!
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制

发生了什么事?不多:我们更改了模型的基类(从雄辩到热心),然后使用自定义错误消息移动(使用相同的语法,只是一个副本)验证规则。

>所以,现在的问题是:我们要在控制器中写什么?

>
<span><span><?php
</span></span><span>
</span><span>    <span>public function postSignup()
</span></span><span>    <span>{
</span></span><span>        <span>$rules = array(
</span></span><span>            <span>'first_name' => 'required',
</span></span><span>            <span>'last_name' => 'required',
</span></span><span>            <span>'email' => 'required|email|unique:users',
</span></span><span>            <span>'password' => 'required|min:8'
</span></span><span>        <span>);
</span></span><span>
</span><span>        <span>$messages = array(
</span></span><span>            <span>'first_name.required' => 'First name is required.',
</span></span><span>            <span>'last_name.required' => 'Last name is required.',
</span></span><span>            <span>'email.required' => 'Email is required.',
</span></span><span>            <span>'password.required' => 'Password is required.',
</span></span><span>
</span><span>            <span>'email.email' => 'Use a real email address!',
</span></span><span>            <span>'email.unique' => 'This email address already exists!',
</span></span><span>            <span>'password.min' => 'Password must be at least 8 character long.'
</span></span><span>        <span>);
</span></span><span>
</span><span>        <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages);
</span></span><span>
</span><span>        <span>if($validator->fails())
</span></span><span>        <span>{
</span></span><span>            <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages());
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>$user = new User;
</span></span><span>
</span><span>        <span>$user->first_name = Input<span>::</span>get('first_name');
</span></span><span>        <span>$user->last_name = Input<span>::</span>get('last_name');
</span></span><span>        <span>$user->email = Input<span>::</span>get('email');
</span></span><span>        <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password'));
</span></span><span>
</span><span>        <span>if($user->save())
</span></span><span>        <span>{
</span></span><span>            <span>$status = 1;
</span></span><span>        <span>}
</span></span><span>        <span>else
</span></span><span>        <span>{
</span></span><span>            <span>$status = 0;
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>return Redirect<span>::</span>to('user/signup')->with('status', $status);
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制
让我们检查一下:

>这里不再有验证指令。他们都消失了。但是,这不仅是“移动”:$ user-> save()方法现在将返回false,如果验证阶段存在一些问题。然后,您将能够使用$ user-> errors() - > all()方法检索错误。没有奇怪的课程:返回的对象将是一个经典的消息包,您可能已经在与Laravel合作时已经遇到了。

但是,如果您愿意,也可以使用$ user-> validationErrors属性。在这种情况下,或者,如果要检索特定字段的错误,只需使用$ user-> validationErrors-> get('field_name')。

现在,您很有可能在思考“好的,但是真正的优势是什么?

让我们从最重要的开始:更好的代码组织意味着更好的项目可维护性。在简单的应用程序中,您无法将其视为优先事项,但是在更大的项目方面,事情很容易被一个错误的决定弄乱。让我以现实世界的情况为例。我们开发了很棒的待办事项列表应用程序,并且它正在迅速增长。我们绝对需要一个安息的API来进行移动应用程序。以“正常”方式使用控制器将意味着为API编写另一个注册例程。具有相同代码的两个不同的块!这是不好的。良好的老式干燥(不要重复自己)原理在哪里?

因此,最好的做法是在处理所有内容的模型中编写Ingeup()方法。使用热心意味着要真正处理所有事情:从验证到保存过程。没有它,我们将无法完成第一阶段。

>

第二个优势是更实用的:模型自动水合物。让我们一起发现。

>

型号自动水合

我们的postignup()方法准确计算了13行代码。即使看起来很困难,热心也可以进一步降低该数字。看看这个示例:

php artisan migrate:make todo_setup
登录后复制
登录后复制
登录后复制
在这里没有错误。您可能已经了解发生了什么。

> Ardent具有模型自动水合物功能。这意味着,当您创建对象并调用$ user-> save()方法时,每个字段都会使用输入对象数据自动填充。当然,您必须相应地在每个表单字段中给出正确的名称。>

>所以,此代码:

将具有与

>相同的效果
<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
</span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
</span></span><span>
</span><span>    <span>class TodoSetup extends Migration {
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Run the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function up()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id')->unsigned();
</span></span><span>
</span><span>                <span>$table->string('first_name');
</span></span><span>                <span>$table->string('last_name');
</span></span><span>                <span>$table->string('email');
</span></span><span>                <span>$table->string('password', 60);
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>            <span>});
</span></span><span>
</span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id');
</span></span><span>
</span><span>                <span>$table->string('name');
</span></span><span>                <span>$table->boolean('status');
</span></span><span>
</span><span>                <span>$table->integer('user_id')->unsigned();
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>
</span><span>                <span>$table->index('user_id');
</span></span><span>            <span>});
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Reverse the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function down()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
</span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

从十三行中,我们刚刚降到了整个注册过程中的七个。

要使用此功能,您将必须激活它。只需将模型中的$ autohydrateityFromintut切换到True,如这样:
<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
</span></span><span>
</span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
</span></span><span>
</span><span>        <span>use UserTrait, RemindableTrait;
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The database table used by the model.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>string</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $table = 'users';
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The attributes excluded from the model's JSON form.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>array</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $hidden = array('password', 'remember_token');
</span></span><span>
</span><span>        <span>public function tasks()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->hasMany('Task');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制
>

完成!

>您通常还会拥有一些冗余数据,而业务逻辑不需要。考虑_ confircation字段或CSRF代币。好吧,我们可以使用该模型的$自动摄影属性属性丢弃它们。和以前一样,只需切换到true即可。
<span><span><?php
</span></span><span>
</span><span>    <span>class Task extends <span>\Eloquent</span> {
</span></span><span>        <span>protected $fillable = [];
</span></span><span>
</span><span>        <span>public function user()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->belongsTo('User');
</span></span><span>        <span>}
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

现在,该过程比以前更干净。

模型钩

<span>{
</span>        <span>"require": {
</span>            <span>"laravelbook/ardent": "2.*"
</span>        <span>}
</span>    <span>}</span>
登录后复制
登录后复制
登录后复制
>值得一提的另一个好功能是引入模型挂钩。从本质上讲,它们是在某些执行时刻中调用的方法列表。因此,举一个示例,将在每个update()调用之前调用afterupdate()方法。在每个验证之前,将调用tofervalidate()方法,依此类推。

>

以下是所有这些方法的列表:

  • beforecreate()
  • > afterCreate()
  • > beforesave()
  • aftersave()
  • > the update()
  • afterupdate()
  • beforedelete()
  • afterdelete()
  • > trefervalidate()
  • aftervalidate()

>一个经典的示例可能是保存过程之前的一些数据详细说明。像这样:

php artisan migrate:make todo_setup
登录后复制
登录后复制
登录后复制

>每个“之前”方法都有一个布尔返回值。如果为true,则以下操作正常执行。如果方法返回false,则该操作将停止。在上面的方法中,我们在验证之后,用beforesave()方法生成了一个sl(并填充了适当的字段)。

>。

>关于beforesave()和后save()也有一个特定的提示:您可以在运行时声明它们。看:

<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
</span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
</span></span><span>
</span><span>    <span>class TodoSetup extends Migration {
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Run the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function up()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id')->unsigned();
</span></span><span>
</span><span>                <span>$table->string('first_name');
</span></span><span>                <span>$table->string('last_name');
</span></span><span>                <span>$table->string('email');
</span></span><span>                <span>$table->string('password', 60);
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>            <span>});
</span></span><span>
</span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
</span></span><span>            <span>{
</span></span><span>                <span>$table->increments('id');
</span></span><span>
</span><span>                <span>$table->string('name');
</span></span><span>                <span>$table->boolean('status');
</span></span><span>
</span><span>                <span>$table->integer('user_id')->unsigned();
</span></span><span>
</span><span>                <span>$table->timestamps();
</span></span><span>
</span><span>                <span>$table->index('user_id');
</span></span><span>            <span>});
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * Reverse the migrations.
</span></span><span><span>         *
</span></span><span><span>         * <span>@return <span>void</span>
</span></span></span><span><span>         */
</span></span><span>        <span>public function down()
</span></span><span>        <span>{
</span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
</span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

让我们考虑一下这些方法在我们的应用程序中的几种可能用途。

>

也许是一个可以处理密码哈希的beforesave()?

<span><span><?php
</span></span><span>
</span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
</span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
</span></span><span>
</span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
</span></span><span>
</span><span>        <span>use UserTrait, RemindableTrait;
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The database table used by the model.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>string</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $table = 'users';
</span></span><span>
</span><span>        <span>/**
</span></span><span><span>         * The attributes excluded from the model's JSON form.
</span></span><span><span>         *
</span></span><span><span>         * <span>@var <span>array</span>
</span></span></span><span><span>         */
</span></span><span>        <span>protected $hidden = array('password', 'remember_token');
</span></span><span>
</span><span>        <span>public function tasks()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->hasMany('Task');
</span></span><span>        <span>}
</span></span><span>
</span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

或用户删除过程之前的清洁挂钩?

>
<span><span><?php
</span></span><span>
</span><span>    <span>class Task extends <span>\Eloquent</span> {
</span></span><span>        <span>protected $fillable = [];
</span></span><span>
</span><span>        <span>public function user()
</span></span><span>        <span>{
</span></span><span>            <span>return $this->belongsTo('User');
</span></span><span>        <span>}
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制
登录后复制

有很多可能性。

定义关系(热心方式)

>热心,您还可以比以前更短的方式定义关系。让我们看看我们如何实际定义模型之间的关系:以下示例显示用户模型中的task()方法。

>
<span>{
</span>        <span>"require": {
</span>            <span>"laravelbook/ardent": "2.*"
</span>        <span>}
</span>    <span>}</span>
登录后复制
登录后复制
登录后复制

使用Ardent定义关系意味着定义一个简单的数组,称为$ REMAINDELDATA。

<span><span><?php
</span></span><span>    <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> {
</span></span><span>        <span>// model code here!
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制

这具有完全相同的效果。 Ardent使用相同的命名约定来绑定名称和方法,而无需一个一个一个。 但是,您可以执行许多自定义:

$ resptiondata中的每个元素都有一个键(是的,关系的方法名称)和一个带有某些参数的数组。

<span><span><?php
</span></span><span>
</span><span>    <span>public function postSignup()
</span></span><span>    <span>{
</span></span><span>        <span>$rules = array(
</span></span><span>            <span>'first_name' => 'required',
</span></span><span>            <span>'last_name' => 'required',
</span></span><span>            <span>'email' => 'required|email|unique:users',
</span></span><span>            <span>'password' => 'required|min:8'
</span></span><span>        <span>);
</span></span><span>
</span><span>        <span>$messages = array(
</span></span><span>            <span>'first_name.required' => 'First name is required.',
</span></span><span>            <span>'last_name.required' => 'Last name is required.',
</span></span><span>            <span>'email.required' => 'Email is required.',
</span></span><span>            <span>'password.required' => 'Password is required.',
</span></span><span>
</span><span>            <span>'email.email' => 'Use a real email address!',
</span></span><span>            <span>'email.unique' => 'This email address already exists!',
</span></span><span>            <span>'password.min' => 'Password must be at least 8 character long.'
</span></span><span>        <span>);
</span></span><span>
</span><span>        <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages);
</span></span><span>
</span><span>        <span>if($validator->fails())
</span></span><span>        <span>{
</span></span><span>            <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages());
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>$user = new User;
</span></span><span>
</span><span>        <span>$user->first_name = Input<span>::</span>get('first_name');
</span></span><span>        <span>$user->last_name = Input<span>::</span>get('last_name');
</span></span><span>        <span>$user->email = Input<span>::</span>get('email');
</span></span><span>        <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password'));
</span></span><span>
</span><span>        <span>if($user->save())
</span></span><span>        <span>{
</span></span><span>            <span>$status = 1;
</span></span><span>        <span>}
</span></span><span>        <span>else
</span></span><span>        <span>{
</span></span><span>            <span>$status = 0;
</span></span><span>        <span>}
</span></span><span>
</span><span>        <span>return Redirect<span>::</span>to('user/signup')->with('status', $status);
</span></span><span>    <span>}</span></span>
登录后复制
登录后复制

>第一个参数(没有键,只是第一个)描述了关系类型(Hasone,Hasmany,Altersto,Alterstomany,Morphto,Morphto,Morphone,Morphmany)。

第二个参数(没有键,仅是第二个)定义了当前关系的目标模型; >
    其他参数没有特定的位置,而是一个键。他们可能是:
  • >
  • 外国钥匙:可选,用于Hasone,Hasmany,Altersto和Alterstomany;
  • >表,其他键,时间戳和Pivotkeys:可选,用于AlterStomany;
  • >
    >名称,类型和ID:与Morphto,Morphone和Morphmany一起使用;
    • 结论
    • >具有很大的优势(也有126K下载和频繁的更新),很难找到不使用下一个应用中热心的理由。它适合各种项目,并且是雄辩模型的扩展,它与Laravel项目完全兼容。
    • >我绝对推荐它。你?你尝试过吗?在下面的评论中让我们知道!
    • >

      经常询问有关Laravel模型的问题(常见问题解答)

      Laravel 4.2、5.0、7.x和10.x雄辩之间的关键差异是什么?在Laravel 4.2中,雄辩是具有基本CRUD操作的简单ORM(对象相关映射)。 Laravel 5.0引入了新功能,例如多个连接,软删除和事件处理。 Laravel 7.x带来了急切的负载,模型序列化和API资源。 Laravel 10.x通过提高性能,更好的错误处理以及诸如批处理操作和模型工厂之类的高级功能进一步增强了雄辩。

      如何ardent Enhindent Enherave Laravel模型?为Laravel添加了一个自动化的智能雄辩模型。它提供了自动验证属性在保存之前的验证,这减少了您需要在控制器中编写的验证代码的量。 Ardent还支持模型及其关系的嵌套交易安全保存,这简化了复杂的保存操作。

      >我如何在Laravel雄辩中使用多个连接?数据库连接通过在您的config/database.php文件中定义它们。然后,在雄辩的模型中,您可以指定用于$ Connection属性的连接。例如,受保护$ Connection ='mysql2';使用“ mySQL2”连接。

      >

      laravel雄辩中的急切加载是什么?在使用大型数据集时,这可以显着提高性能。您可以在雄辩中使用with with()方法来指定与急切的负载的关系。

      我如何在laravel雄辩中使用软删除?

      soft of laravel elo felogent of laravel elo ologent of of'delete允许您' ``记录而没有实际将其从数据库中删除。相反,设置了DELETED_AT时间戳。您可以通过使用软骨骼特征并将deleted_at列添加到您的表中。

      laravel雄辩的模型工厂是什么?为了生成用于测试或播种数据库的新模型实例的方便方法。您可以定义一个模型工厂,该工厂指定模型的默认属性值,然后使用该工厂使用这些默认值创建新实例。

      如何如何保存热心的hand hander handing nested transed-save保存? > Ardent提供了一种Savenested()方法,该方法将模型及其所有相关模型保存在单个数据库事务中。这样可以确保所有保存成功,或者无需这样做,以维护数据的完整性。

      >

      >如何在Laravel雄辩中使用API​​资源?

      API资源在Laravel雄辩中允许您将模型和模型集合转换为JSON格式,以用于API中。您可以创建一个资源类,该类别定义应该如何转换模型,然后从API路由返回该资源类的实例。

      如何artent whand hander ander验证?

      ardent自动验证您的验证在保存之前,模型的属性针对模型中定义的一组规则。如果验证失败,则保存操作将中止,并且可以通过errors()方法来获得验证错误。

      > (Laravel雄辩中的方法是一个生命周期钩,当模型被“启动”(即加载到内存中)时称为。您可以在模型中覆盖此方法,以添加每当启动模型时都会发生的行为,例如注册事件侦听器或自定义模型的配置。>

以上是热心:类固醇上的Laravel模型的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1243
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

解释self ::,parent ::和static :: in php oop中的区别。 解释self ::,parent ::和static :: in php oop中的区别。 Apr 09, 2025 am 12:04 AM

在PHPOOP中,self::引用当前类,parent::引用父类,static::用于晚静态绑定。1.self::用于静态方法和常量调用,但不支持晚静态绑定。2.parent::用于子类调用父类方法,无法访问私有方法。3.static::支持晚静态绑定,适用于继承和多态,但可能影响代码可读性。

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

什么是HTTP请求方法(获取,发布,放置,删除等),何时应该使用? 什么是HTTP请求方法(获取,发布,放置,删除等),何时应该使用? Apr 09, 2025 am 12:09 AM

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

PHP如何安全地上载文件? PHP如何安全地上载文件? Apr 10, 2025 am 09:37 AM

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

See all articles