關於Laravel的Eloquent ORM的解析

來源:互聯網
上載者:User
這篇文章主要介紹了關於Laravel之Eloquent ORM ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、ORM編程思想

1.1 Active Record 設計模式

Active Record 是一種資料訪問設計模式,它可以協助你實現資料對象Object到關聯式資料庫的映射。應用Active Record時,每一個類的執行個體對象唯一對應一個資料庫表的一行(一對一關聯性)。你只需繼承一個abstract Active Record 類就可以使用該設計模式訪問資料庫,其最大的好處是使用非常簡單


1.2 調試工具 Laravel Debugbar

https://github.com/barryvdh/l...

Installation:

composer require barryvdh/laravel-debugbar --dev

二、一對一關聯性映射

2.1 建立表

public function up()    {        Schema::create('profiles', function (Blueprint $table) {            $table->increments('id');            $table->string('phone');            $table->unsignedInteger('user_id');            //顯示的聲明外鍵:通知數據庫根據外部索引鍵關聯表和建立索引,提高運行速度            $table->foreign('user_id')                ->references('id')                ->on('users')                ->onDelete('cascade');            $table->timestamps();        });    }

2.2 建立模型關係

2.2.1 正向關係綁定

public function profile(){    return $this->hasOne(Profile::class);}

2.2.2 反向關係綁定

public function user(){    return $this->belongsTo(User::class);}

2.3 外鍵

自訂外鍵:

return $this->hasOne(Profile::class,'顯示指定自訂外鍵');

2.4 一對一測試

依賴注入Request $request,擷取當前登入使用者$request->user()

Route::get('/test',function (Request $request){    //反向//    $profile = \App\Profile::find(1);//    dd($profile->user);    $user = $request->user();//    if (is_null($user->profile)){//        $user->profile()->create([//            'phone' => '15801340269'//        ]);//    }    //用firstOrCreate改進if    $user->profile()->firstOrCreate(['user_id' => $user->id],[        'phone' => '18363046291'    ]);    //訪問屬性一樣存取方法    dd($user->profile);});

三、一對多關聯性映射

1:N hasMany(XXX:class) 反之:belongsTo(XXX:class)

3.1 物件導向方式綁定一對多的關係

四、多對多關係映射

中間表命名:按照A-Z首字母排序

public function users(){    return $this->belongsToMany(User::class);}public function habits(){    return $this->belongsToMany(Habit::class);}

4.1 物件導向方式綁定多對多的關係

detach解除綁定,sync方法用的比較多,只保留1,2

4.2 訪問多對多中間資料表

五、HasManyThrough對象橋接式穿越關聯(遠層一對多)

資料表:

countries    id - integer    name - stringusers    id - integer    country_id - integer    name - stringposts    id - integer    user_id - integer    title - string
class Country extends Model{    protected $fillable = ['name'];    /**     * 獲得某個國家下所有的使用者文章。     */    public function papers()    {        return $this->hasManyThrough(Paper::class,User::class);    }}
$factory->define(App\Paper::class, function (Faker $faker) {    return [        'title' => $faker->sentence,        'user_id' => \App\User::all()->random()->id,    ];});

$factory->define(App\User::class, function (Faker $faker) {    return [        'name' => $faker->name,        'email' => $faker->unique()->safeEmail,        'country_id' => \App\Country::all()->random()->id,        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgpFlYg7B77UdFm', // secret        'remember_token' => str_random(10),    ];});

擷取每個國家論文總數:

五、多樣化的一對多關聯性映射(多態關聯)

物件導向多態:運行時載入機制

更多:https://laravel-china.org/doc...
偽造資料:

六、多對多多態關聯

除了傳統的多態關聯,您也可以定義「多對多」的多態關聯。例如,Post 模型和 Video 模型可以共用一個多態關聯至 Tag 模型。 使用多對多多態關聯可以讓您在文章和視頻中共用唯一的標籤列表。
更多:https://laravel-china.org/doc...

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.