搜尋
首頁後端開發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
11個最佳PHP URL縮短腳本(免費和高級)11個最佳PHP URL縮短腳本(免費和高級)Mar 03, 2025 am 10:49 AM

長URL(通常用關鍵字和跟踪參數都混亂)可以阻止訪問者。 URL縮短腳本提供了解決方案,創建了簡潔的鏈接,非常適合社交媒體和其他平台。 這些腳本對於單個網站很有價值

在Laravel中使用Flash會話數據在Laravel中使用Flash會話數據Mar 12, 2025 pm 05:08 PM

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

構建具有Laravel後端的React應用程序:第2部分,React構建具有Laravel後端的React應用程序:第2部分,ReactMar 04, 2025 am 09:33 AM

這是有關用Laravel後端構建React應用程序的系列的第二個也是最後一部分。在該系列的第一部分中,我們使用Laravel為基本的產品上市應用程序創建了一個RESTFUL API。在本教程中,我們將成為開發人員

簡化的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' =>

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

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

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

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

宣布 2025 年 PHP 形勢調查宣布 2025 年 PHP 形勢調查Mar 03, 2025 pm 04:20 PM

2025年的PHP景觀調查調查了當前的PHP發展趨勢。 它探討了框架用法,部署方法和挑戰,旨在為開發人員和企業提供見解。 該調查預計現代PHP Versio的增長

Laravel中的通知Laravel中的通知Mar 04, 2025 am 09:22 AM

在本文中,我們將在Laravel Web框架中探索通知系統。 Laravel中的通知系統使您可以通過不同渠道向用戶發送通知。今天,我們將討論您如何發送通知OV

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 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版