目錄
定義關係(熱心方式)
經常詢問有關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教學
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1264
29
C# 教程
1237
24
說明PHP中的不同錯誤類型(注意,警告,致命錯誤,解析錯誤)。 說明PHP中的不同錯誤類型(注意,警告,致命錯誤,解析錯誤)。 Apr 08, 2025 am 12:03 AM

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

說明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 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

什麼是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 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

解釋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如何安全地上載文件? PHP如何安全地上載文件? Apr 10, 2025 am 09:37 AM

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

See all articles