Laravel框架ORM关联hasOne,belongsTo,hasMany

  • 原创
  • |
  • 浏览:3026
  • |
  • 更新:

Laravel框架的ORM支持数据之间关联关系, 使得在某些情况下查询和操作更加方便,例如,应用中每个供应商只有一个账户 , 应用中一篇文章对应多条评论等.

记得当时在用Ruby on rails的时候就深深的喜欢上了这个特性, 现在laravel框架也同样支持这样的功能,所以把使用方法做个记录,防止自己忘记.如有使用不对的地方请指出,谢谢.

Laravel框架ORM关联hasOne,belongsTo,hasMany

工具/原料

  • laravel框架使用
  • mysql的外键

方法/步骤

  1. 1

    首先我们假定你顺利安装了laravel5.4.x框架并且配置了数据库的连接.那我接下来做一些初始化的工作,包括创建控制器,生成model文件和迁移文件及数据填充.

       其中红框两处表示:

          生成外键约束

          $table->integer('user_id')->unsigned()

          $table->foreign('user_id')->references('id')->on('users');

          同步生成对应填充的user数据, 并使用user_id

          'user_id'=>factory(App\User::class)->create()->id,

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  2. 2

    迁移文件及数据填充,这里我填充2条测试数据做演示.执行上面的命令检查你的数据库对应的表里面是否有数据

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  3. 3

    那我们接下来说说hasOne的定义和使用,结合我们上面建立的表解释一下hasOne和belongsTo,对于users表来说,有一条users数据就有一条orms数据,这里我们假设这个表的数据是完整的.所以这两种表之间的hasOne和belongsTo关系如下

               users  hasOne   orms

               orms  belongsTo users

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  4. 4

    我们在添加一条路由,并在控制器中使用测试我们的hasOne关联是否好用

          Route::get('/orm/index', 'OrmController@index')->name('orm.index');

         

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  5. 5

    从上面的图片从属关系我们发现hasOne顺利执行,并且也得到了我们想要的结果,接下来看belongsTo

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  6. 5
    相关内容未经授权抓取自百度经验
  7. 6

    hasmany关联在实际也很常见,例如一篇文章有多条评论,一个用户有多个订单等等.我们创建一张books表来看hasmany的使用,还是一样准备测试数据

           php artisan make:model Book -m

           php artisan migrate

           php artisan tinker

           factory (App\Book::class,5)->create();

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  8. 7

    在user的model中定义hasMany,并在orm的测试控制器的index方法中查询对应的数据是否显示正常

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
    Laravel框架ORM关联hasOne,belongsTo,hasMany
  9. 8

    致谢DHH 的Ruby on rails敏捷开发框架, 经验中的图片使用Ruby on rails框架中的关联关系的图片.本人是把当时学rails的关联关系的经验,迁移到laravel框架中,如果有哪里写的对,麻烦各位大神指出.

    Laravel框架ORM关联hasOne,belongsTo,hasMany
    END

注意事项

  • mysql外键约束的使用,是为了保证数据的一致性和完整性
  • 关联关系图片使用了Ruby on rails的关联关系图片
  • 你也可以把$books = $user->books()->get()->toArray();简写成$books = $user->books->toArray();的形式
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部