这篇文章主要介绍了关于Laravel之Eloquent ORM ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
Active Record
是一种数据访问设计模式,它可以帮助你实现数据对象Object
到关系数据库的映射。应用Active Record
时,每一个类的实例对象唯一对应一个数据库表的一行(一对一关系)。你只需继承一个abstract Active Record
类就可以使用该设计模式访问数据库,其最大的好处是使用非常简单
https://github.com/barryvdh/l...
Installation:
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
数据表:
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.KjNyWgaHb9cbcoQgpFlYg7B77UdFm', // secret 'remember_token' => str_random(10), ]; });
获取每个国家论文总数:
面向对象多态:运行时加载机制
更多:https://laravel-china.org/doc...
伪造数据:
Zusätzlich zu den traditionellen polymorphen Assoziationen können Sie auch „viele-zu-viele“-Polymorphie-Assoziationen definieren. Beispielsweise können ein Post
-Modell und ein Video
-Modell einen polymorphen Link zum Tag
-Modell gemeinsam nutzen. Durch die Verwendung einer polymorphen Viele-zu-Viele-Assoziation können Sie eine eindeutige Liste von Tags für Artikel und Videos freigeben.
Mehr: https://laravel-china.org/doc...
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für alle zum Lernen hilfreich sein. Bitte achten Sie auf PHP Chinese Net!
Verwandte Empfehlungen:
Über Laravel Basic Migrationsanalyse von
Das obige ist der detaillierte Inhalt vonAnalyse des eloquenten ORM von Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!