关于Laravel的EloquentORM的解析

关于Laravel的EloquentORM的解析

内容导读

收集整理的这篇技术教程文章主要介绍了关于Laravel的EloquentORM的解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3434字,纯文字阅读大概需要5分钟

内容图文

这篇文章主要介绍了关于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 = AppProfile::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(AppPaper::class, function (Faker $faker) {

return [



'title' => $faker->sentence,



'user_id' => AppUser::all()->random()->id,

];});

$factory->define(AppUser::class, function (Faker $faker) {

return [



'name' => $faker->name,



'email' => $faker->unique()->safeEmail,



'country_id' => AppCountry::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...

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Laravel 5.5中为响应请求提供的可响应接口的详解

关于Laravel基础Migrations的解析

以上就是关于Laravel的Eloquent ORM的解析的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的关于Laravel的EloquentORM的解析全部内容,希望文章能够帮你解决关于Laravel的EloquentORM的解析所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com