56星座屋
当前位置: 首页 星座百科

laravel入门模型(说说Laravel模型关联关系最单纯的)

时间:2023-06-02 作者: 小编 阅读量: 2 栏目名: 星座百科

如果所有关联关系放到数据库层面操作,势必非常不便。所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。该实例有一个profile方法,就是上面这段关系声明。调用profile返回的是一个Profile对象的实例,所以可以继续调用Profile的属性,也就是telephone的由来了。除了在程序上下文的一致性保证外,还可以使用数据库的外键,在删除user时将profile关联删除。更复杂的关系,在编程层面是有意义的,我们下一章介绍更多的关联关系。

引言

关系型数据库提供了非常好用的数据关联绑定模式,使用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模型关联的最简单的“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时的一致性删除。更复杂的关系,在编程层面是有意义的,我们下一章介绍更多的关联关系。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

,
    推荐阅读
  • 黄瓜种子不泡能发芽吗(不泡水的黄瓜种子能不能生芽)

    以下内容希望对你有帮助!通常用正确的方式将它浸泡,只需要等待五到七天就能看到黄瓜种子发芽。浸泡黄瓜种子的方法非常简单,我们需要先准备适量温度在55℃到60℃之间的热水,将黄瓜种子放入其中浸泡十到十五分钟之后,再把它捞出来放入30℃的水中浸泡两到六个小时。

  • 南京师范大学附属苏州石湖中学2022年初一新生入学公告

    ④提前下载安装好“苏周到APP”,并提前注册登录好,现场需查验房产信息。一旦发现弄虚作假者,我校将不予入学或作退学处理。特别提醒:信息采集最多上传4张图片,故房产证、户口本复印件尽量拼在一起。5)确认好学校,点击下一步。

  • 搬板与换主板的区别 搬板和换主板的区别

    手机或设备主板出现无法修复的故障或损坏,将部分原件拆下移植到另外一块板子上的过程叫搬板,也叫换主板。它安装在机箱内,是微机最基本的也是最重要的部件之一。主板采用了开放式结构。通过更换这些插卡,可以对微机的相应子系统进行局部升级,使厂家和用户在配置机型方面有更大的灵活性。可以说,主板的类型和档次决定着整个微机系统的类型和档次。主板的性能影响着整个微机系统的性能。

  • 翡翠小四是什么意思(翡翠小四的解释)

    翡翠小四是什么意思?以下内容希望对你有帮助!翠作为天然的玉石,其制作成的翡翠饰品价格昂贵,但是与普通的金属饰品不同,翡翠手镯的价格定位极其复杂。因此,有些专业的话术就出现了,通常都是为了表达大概价格的范围。大中小后面的数字是指价格的位数,例如三是指三位整数的价格,四是指四位整数的价格,而小是指数字一到三。因此,翡翠小四是指翡翠价格一千以上至四千以下。

  • 什么瑜伽动作可以瘦肌肉腿(哪些瑜伽动作能快速减去腿部赘肉)

    目标是10秒钟内做5次。抬起脚趾头的姿势数2秒,回到原先的姿势,此时注意大腿后侧。缓缓抬起小腿,保持这个姿势三秒左右,然后放下,重复动作十至十五次。轮流做二十至三十次,直至小腿感到疲乏。

  • 色谱分析法介绍(色谱分析法简介)

    色谱分析法介绍色谱分析法、又称层析法,色层法,层离法。其分离原理是利用混合物中各组分在固定相和流动相中溶解、解析、吸附、脱附或其他亲和作用性能的微小差异,当两相作相对运动时,使各组分随着移动在两相中反复受到上述各种作用而得到分离。色谱法已成为分离分析各种复杂混合物的重要方法,但对分析对象的鉴别能力较差。根据流动相和固定相的不同,色谱法分为气相色谱法和液相色谱法。

  • 减肥期间喝减肥茶(减肥茶减肥喝出来)

    减肥期间喝减肥茶腹部减肥,除了运动,还要饮食结合,除了少吃油腻食物,喝茶也是不错的瘦腹手段。茶中含有大量的食物纤维和维生素B1,能将脂肪充分燃烧并转化为热能。第三最好是在空腹时饮用。因为杜仲所含成分可促进新陈代谢和热量消耗,而使体重下降。除此之外还有预防衰老、强身健体的作用。饭前、饭后喝一杯乌龙茶,可促进脂肪的分解,使其不被身体吸收就直接排出体外,防止因脂肪摄取过多而引发的肥胖。

  • 醋是酸性还是碱性(柿子醋是酸性还是碱性)

    当醋从化学领域步入食物营养领域之后,醋成了碱性食品。酸性/碱性食品的酸碱度与进入人体之前的物质酸碱度没有必然的联系。比如醋是酸的,柑、梅、杏等水果也是酸的,但它们非但不是酸性食品,恰恰相反,却是典型的碱性食品。又如粮食、糖果、糕点、鱼、猪肉及其他动物肉类等,则不是碱性食品,全都属于酸性食品。

  • 10月阴雨天钓鱼技巧(阴雨天钓鱼技巧需要掌握这三个技巧)

    10月阴雨天钓鱼技巧?接下来我们就一起去研究一下吧!这些位置含氧量高,水底微生物多,各种水底浮游生物及一些小鱼小虾也相对集中,所以这些活水位置是非常适合钓鱼的,钓点选在这附近没毛病。

  • 冬瓜怎么保存不会烂掉(怎么保存冬瓜)

    以下内容大家不妨参考一二希望能帮到您!冬瓜怎么保存不会烂掉不要清洗。我们可以用保鲜膜把冬瓜包起来,然后放冰箱的保鲜层,存放两三天都没事。把冬瓜切开后,将上面的黏液弄干净了,在冬瓜的切面上涂抹一点白酒,再用保鲜膜将冬瓜的表面包裹起来,放在阴凉通风处可以保存1个月。