Home >Backend Development >PHP Tutorial >Analysis of Laravel's Eloquent ORM
这篇文章主要介绍了关于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...
伪造数据:
In addition to traditional polymorphic associations, you can also define "many-to-many" polymorphic associations. For example, the Post
model and the Video
model can share a polymorphic association to the Tag
model. Using a many-to-many polymorphic association allows you to share a unique list of tags across articles and videos.
More: https://laravel-china.org/doc...
The above is the entire content of this article. I hope it will be helpful to everyone's study. For more related content, please pay attention to PHP Chinese net!
Related recommendations:
Detailed explanation of the responsive interface provided in Laravel 5.5 for responding to requests
About Laravel basic Migrations Analysis
The above is the detailed content of Analysis of Laravel's Eloquent ORM. For more information, please follow other related articles on the PHP Chinese website!