Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

本博文主要介绍 Laravel 框架中 Eloquent  对一对多关系的处理以及在 Laravel
Administrator(后台扩展包)中的应用。

您的数据库可能是彼此相关的。比方,一篇博客文章可能有很多评论,或者一个订单与下订单的用户相关。Eloquent 使得管理和处理这些关系变得简单。Laravel 提供了四种类型的关系: -一对一 -一对多 -多对多
- 多态关系

一对多

一个一对多关系的样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。

我们能够像这样定义关系模型 Model:

  1. <?php
  2. /**
  3. * sobjectinfo:课程信息表 Model
  4. * soc_id :主键自增
  5. * soc_name :课程名
  6. * soc_teacher:授课老师
  7. **/
  8. class SobjectInfo extends Eloquent {
  9. //自己定义表名(protected $table)
  10. protected $table = 'sobjectinfo';
  11.  
  12. //自己定义主键(protected $primaryKey)
  13. protected $primaryKey = 'soc_id';
  14.  
  15. //关闭 创建时间 与 更新时间 的自己主动维护(protected $timestamps)
  16. public $timestamps = false;
  17.  
  18. /*
  19. * 定义一对多关系
  20. */
  21. public function Scoreinfo(){
  22. return $this -> hasMany('Scoreinfo','soc_id');
  23. }
  24. }
  25.  
  26. ?>

定义与之相应的逆向关系 Model:

  1. <?php
  2. /**
  3. * scoreinfo:分数信息表 Model
  4. * so_id :主键自增
  5. * s_id :学生信息表(stuinfo)主键
  6. * soc_id :课程信息表(sobjectinfo)主键
  7. * score :分数
  8. */
  9. class ScoreInfo extends Eloquent {
  10. //自己定义表名(protected $table)
  11. protected $table = 'scoreinfo';
  12.  
  13. //自己定义主键(protected $primaryKey)
  14. protected $primaryKey = 'so_id';
  15.  
  16. //关闭 创建时间 与 更新时间 的自己主动维护(protected $timestamps)
  17. public $timestamps = false;
  18.  
  19. /*
  20. * 分数表(ScoreInfo)与课程表(SobjectInfo)、学生信息表(StuInfo)有主外键关系
  21. * 而且是一对多的关系
  22. */
  23. public function StuInfo(){
  24. return $this -> belongsTo('StuInfo','s_id');
  25. }
  26.  
  27. /*
  28. * 定义逆向关系指向主键表
  29. * */
  30. public function SobjectInfo(){
  31. return $this -> belongsTo('SobjectInfo','soc_id');
  32. }
  33. }
  34.  
  35. ?
  36.  
  37. >

通过以上步骤的处理。表与表之间的一对多关系已确立,

以下将介绍在Laravel Administrato 后台中的实现 下拉列表查询、绑定等应用

  1. <?php
  2.  
  3. return array(
  4.  
  5. 'title' => '分数信息', //栏目名
  6. 'single' => ' >>', //新建描写叙述
  7. 'model' => 'ScoreInfo', //分数信息
  8. 'form_width' => 960, //左边栏目宽
  9.  
  10. //列表
  11. 'columns' => array(
  12. 'so_id' => array(
  13. 'title' => '编号',
  14. 'select' => "so_id",
  15. 'sort_field'=>'so_id'
  16. ),
  17. 's_name'=>array(
  18. 'title'=>'学生姓名',
  19. 'relationship' => 'StuInfo',
  20. 'select' => '(:table).s_name',
  21. ),
  22. 'soc_name'=>array(
  23. 'title'=>'课程名称',
  24. 'relationship' => 'SobjectInfo',
  25. 'select' => '(:table).soc_name',
  26. ),
  27. 'score'=>array(
  28. 'title'=>'考试分数',
  29. 'select'=>'score'
  30. ),
  31. ),
  32.  
  33. //筛选信息
  34. 'filters' => array(
  35. 'so_id' => array(
  36. 'title'=>'编号'
  37. ),
  38. 'SobjectInfo'=>array(
  39. 'type' => 'relationship',
  40. 'title' => '课程名'
  41. 'name_field' => 'soc_name',
  42. ),
  43. 'StuInfo'=>array(
  44. 'type' => 'relationship',
  45. 'title' => '学生姓名',
  46. 'name_field' => 's_name',
  47. ),
  48. 'score'=>array(
  49. 'title'=>'考试分数',
  50. 'type' => 'number'
  51. ),
  52.  
  53. ),
  54.  
  55. //改动、新增
  56. 'edit_fields' => array(
  57. 'StuInfo'=>array(
  58. 'type' => 'relationship',
  59. 'title' => '学生姓名',
  60. 'name_field' => 's_name',
  61. ),
  62. 'SobjectInfo'=>array(
  63. 'type' => 'relationship',
  64. 'title' => '课程名',
  65. 'name_field' => 'soc_name',
  66. ),
  67. 'score'=>array(
  68. 'title'=>'考试分数',
  69. 'type'=>'text'
  70. ),
  71. )
  72.  
  73. );
  74.  
  75. ?>

以上演示样例展示的是 后台 分数信息 类。

演示样例中多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同的表中,但因为我们之前在 Model中已建立了它们之间的 一对多关系,因此我们能够自由搭配组合

效果图例如以下:

10个Laravel4开发者必用扩展包:

http://blog.csdn.net/yimiyuangguang/article/details/39756115

Laravel Administrator 文档

http://administrator.frozennode.com/docs/field-type-relationship

Laravel4 中文帮助手冊:

http://pan.baidu.com/s/1jGl6cqa

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理的更多相关文章

  1. Struts2框架下表单数据的流向以及映射关系

    本例框架很简单:默认页面为用户登录界面login.jsp,提交后由action类LoginAction.java来判断成功或失败,登录结果分别由success.jsp和failure.jsp呈现. 一 ...

  2. laravel框架手动删除迁移文件后再次创建报错

    手动删除laravel框架数据表迁移文件后再次创建报错 如下图: 执行创建操作之后会在autoload_static.php及autoload_classmap.php这两个文件中添加迁移文件的目录. ...

  3. Django框架----跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  4. Openstack_SQLAlchemy_一对多关系表的多表插入实现

    目录 目录 Openstack 与 SQLAlchemy 一个多表插入的 Demo 小结 Openstack 与 SQLAlchemy SQLAlchemy 是 Python 语言下的一款开源软件,它 ...

  5. Laravel5.1 模型 --一对多关系

    一对多关系算是比较常用的一种关联关系了,关于一对多我们可以用 文章对应评论 来举例:一篇文章可以有多个评论,但是一个评论只属于一篇文章. 这就是一对多关系. 1 实现一对多关系 我们先来准备两个模型, ...

  6. 菜鸟学习Hibernate——一对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...

  7. Laravel 框架对于分表进行统计合并查询的思路

    当对数据表进行水平分表之后,若要进行数据统计,往往需要对所有分表一起进行联合查询.在使用 Laravel 框架时,可以利用 Model 类的 setTable 方法对于多个表进行合并查询. 举个例子, ...

  8. laravel框架入门

    本文摘自网络,个人感觉写的很不错,决定收藏一下纯属本人学习之用 本文介绍如何开始使用 Laravel. 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库: L ...

  9. 关于Laravel框架

    第1讲-Laravel介绍 1.1 什么是Laravel laravel是目前一个比较主流的框架,现在很多互联网的公司都在使用该框架.该框架的前身是symfony框架 Laravel的定位就是做一个简 ...

随机推荐

  1. FckEditor组件的使用(新闻浏览发布页面)

    FckEditor组件的使用 准备工作: 1)将FckEditor目录拷贝到网站根目录内. 2)在Web.config的AppSetting分支中添加如下的代码,并修改FckEditor的目录和上传文 ...

  2. <body>标签,网页上显示的内容放在这里

    在网页上要展示出来的页面内容一定要放在body标签中.如下图是一个新闻文章的网页. 在浏览器中的显示效果: 示例: <!DOCTYPE HTML> <html> <hea ...

  3. Swift - 07 - 布尔类型

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  4. PHP MySQL 插入多条数据

    PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...

  5. uvalive 5721 Activation (概率dp+方程)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=24999 主要思想就是解方程的思想. 二维dp应该很容易想到,就是当前位置加队伍长度. dp ...

  6. highCharts 图表统计控件使用方法

    1.首先引用js文件 在引用上面文件时,保证已经引用了jquery.js文件.且位置在上面两个文件之前. 2. <div id="container" style=" ...

  7. apache 上配置多个django工程

    我的环境是win7+python2.7.8+django1.6.4+apache2.2 废话不多说,直接进入正题: 下载对应的版本的mod_wsgi.so 第一步:添加mod_wsgi.so(记得对应 ...

  8. django 内建标签和过滤器参考

    下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...

  9. 线程间操作无效: 从不是创建控件“textBox2”的线程访问它

    如何:对 Windows 窗体控件进行线程安全调用 线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调 ...

  10. process launch failed : failed to get the task for process xxx

    原因: 证书问题,project和targets的证书都必须是开发证书,ADHOC的证书会出现此问题. 解决方案: project和targets的证书使用开发证书.   其他: This error ...