這篇文章主要介紹了關於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!