Active Record
是一種數據訪問設計模式,它能夠幫助你實現數據對象Object
到關係數據庫的映射。應用Active Record
時,每個類的實例對象惟一對應一個數據庫表的一行(一對一關係)。你只需繼承一個abstract Active Record
類就可使用該設計模式訪問數據庫,其最大的好處是使用很是簡單laravel
https://github.com/barryvdh/l...git
Installation:github
composer require barryvdh/laravel-debugbar --dev
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(); }); }
public function profile() { return $this->hasOne(Profile::class); }
public function user() { return $this->belongsTo(User::class); }
自定義外鍵:數據庫
return $this->hasOne(Profile::class,'顯示指定自定義外鍵');
依賴注入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)
中間表命名:按照A-Z
首字母排序設計模式
public function users() { return $this->belongsToMany(User::class); } public function habits() { return $this->belongsToMany(Habit::class); }
detach解綁,sync方法用的比較多,只保留1,2
composer
數據表:dom
countries id - integer name - string users id - integer country_id - integer name - string posts 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.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret 'remember_token' => str_random(10), ]; });
獲取每一個國家論文總數:ide
面向對象多態:運行時加載機制
更多:https://laravel-china.org/doc...
僞造數據:
工具
除了傳統的多態關聯,您也能夠定義「多對多」的多態關聯。例如,Post
模型和 Video
模型能夠共享一個多態關聯至 Tag
模型。 使用多對多多態關聯可讓您在文章和視頻中共享惟一的標籤列表。
更多:https://laravel-china.org/doc...