首頁 > 後端開發 > php教程 > 熱心:類固醇上的Laravel模型

熱心:類固醇上的Laravel模型

William Shakespeare
發布: 2025-02-19 09:07:12
原創
229 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板