十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章给大家分享的是有关Laravel模型关联关系最单纯的“一对一”示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联服务项目包括叶集网站建设、叶集网站制作、叶集网页制作以及叶集网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,叶集网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到叶集省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
引言
关系型数据库提供了非常好用的数据关联绑定模式,使用SQL语句可以方便地进行关联数据查询和操作。
如果所有关联关系放到数据库层面操作,势必非常不便。
所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。
代码时间
我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习的方式。
还是从示例触发,看看关联关系到底解决的是什么问题,以及如何使用。
首先是数据库的准备,假设有如下两个表的字段对应关系:
使用命令行创建一个Profile模型,并同时创建迁移文件:
php artisan make:model Profile --migration
来看生成的 app/Profile.php文件的内容:
namespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model {}
因为使用了 –migration选项,laravel自动生成了 database/migrations/2020_10_11_015236_create_profiles_table.php文件,
用于生成对应的数据库 profiles表。
还是老规矩,先实现数据库迁移使用的 up方法:
public function up(){ Schema::create('profiles', function(Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); $table->string('url'); $table->string('telephone'); $table->timestamps(); });}
用于回滚的方法就不列出来了,仅仅是表的删除。下面手动执行迁移指令:
php artisan migrate
输出内容如下:
Migrated: 2020_10_11_015236_create_profiles_table.php
关联关系
一切准备就绪,我们开始使用关联关系来处理数据的一致性。一个user对应一个profile,所以这是一对一的关系,
在User模型里添加如下声明:
class User extends Model { public function profile() { return $this->hasOne('App\Profile'); }}
一旦定义了上述方法,就可以这样链式调用了:
$user = User::find(1)->profile->telephone;
我们拆解开做解释。首先使用 User::find($id)返回的是一个 User 模型对象的实例。
该实例有一个 profile方法,就是上面这段关系声明。
调用 profile返回的是一个 Profile 对象的实例,所以可以继续调用Profile的属性,也就是 telephone 的由来了。
需要特别注意的是,类似下面的写法,返回结果是不同的:
$user = User::find($id); $user->profile; // 返回 Profile 对象 $user->profile(); // 返回 hasOne 关联关系对象
大家在使用的时候,一定不要迷惑,要分清楚使用方法。
有了关联查询,自然就有关联更新,用法如下:
$profile = new Profile; $profile->telephone = '12345678'; $user = User::find(1); $user->profile()->save($profile);
有了关联更新这种写操作,自然就有了关联删除,模型方法的调用而已:
$user = User::find($id); $user->profile()->delete();
由于是严格一对一的关系,也就是一个user只有一个profile,如果某个user被删除了,
就会剩下一个孤零零的profile无所依附。
除了在程序上下文的一致性保证外,还可以使用数据库的外键,在删除user时将profile关联删除。那么只要修改迁移文件,
并添加如下内容:
$table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
感谢各位的阅读!关于“Laravel模型关联关系最单纯的“一对一”示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!