搜索
首页后端开发php教程热心:类固醇上的Laravel模型

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><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>
我们只是提出了起点。从现在开始,安装后,我们将看到两种不同的情况:首先,代码的“正常”版本而没有热心。此后,我们将与“改进”版本进行比较。您会注意到区别,相信我。

>让我们开始!

>安装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>        <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><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></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></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></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>        <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></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><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>

有很多可能性。

定义关系(热心方式)

>热心,您还可以比以前更短的方式定义关系。让我们看看我们如何实际定义模型之间的关系:以下示例显示用户模型中的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></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></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
在Laravel中使用Flash会话数据在Laravel中使用Flash会话数据Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展php中的卷曲:如何在REST API中使用PHP卷曲扩展Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了简化的HTTP响应在Laravel测试中模拟了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本在Codecanyon上的12个最佳PHP聊天脚本Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

PHP记录:PHP日志分析的最佳实践PHP记录:PHP日志分析的最佳实践Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

解释PHP中晚期静态结合的概念。解释PHP中晚期静态结合的概念。Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

在Laravel中发现文件下载的存储::下载在Laravel中发现文件下载的存储::下载Mar 06, 2025 am 02:22 AM

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

如何注册和使用Laravel服务提供商如何注册和使用Laravel服务提供商Mar 07, 2025 am 01:18 AM

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具