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

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

大家好,又见面了,我是全栈君。

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

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

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

      一对多

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

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

<?php
/**
 * sobjectinfo:课程信息表 Model
 * soc_id     :主键自增
 * soc_name   :课程名
 * soc_teacher:授课老师
 **/
class SobjectInfo extends Eloquent {
    //自己定义表名(protected $table)
    protected $table = 'sobjectinfo';

    //自己定义主键(protected $primaryKey)
    protected $primaryKey = 'soc_id';

    //关闭 创建时间 与 更新时间 的自己主动维护(protected $timestamps)
    public $timestamps = false;

    /*
     * 定义一对多关系
     */
    public function Scoreinfo(){
        return $this -> hasMany('Scoreinfo','soc_id');
    }
}

?>

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

<?php
/**
 * scoreinfo:分数信息表 Model
 * so_id   :主键自增
 * s_id    :学生信息表(stuinfo)主键
 * soc_id  :课程信息表(sobjectinfo)主键
 * score   :分数
 */
class ScoreInfo extends Eloquent {
       //自己定义表名(protected $table)
       protected $table = 'scoreinfo';

       //自己定义主键(protected $primaryKey)
       protected $primaryKey = 'so_id';

       //关闭 创建时间 与 更新时间 的自己主动维护(protected $timestamps)
       public $timestamps = false;

       /*
        * 分数表(ScoreInfo)与课程表(SobjectInfo)、学生信息表(StuInfo)有主外键关系
        * 而且是一对多的关系
        */
        public function StuInfo(){
            return $this -> belongsTo('StuInfo','s_id');
        }

        /*
         * 定义逆向关系指向主键表
         * */
        public function SobjectInfo(){
            return $this -> belongsTo('SobjectInfo','soc_id');
        }
} 

?

>

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

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

<?php

return array(

    'title' => '分数信息',        //栏目名
    'single' => ' >>',            //新建描写叙述
    'model' => 'ScoreInfo',       //分数信息
    'form_width' => 960,          //左边栏目宽

    //列表
    'columns' => array(
        'so_id' => array(
            'title' => '编号',
            'select' => "so_id",
            'sort_field'=>'so_id'
        ),
        's_name'=>array(
            'title'=>'学生姓名',
            'relationship' => 'StuInfo',
            'select' => '(:table).s_name',
        ),
       'soc_name'=>array(
            'title'=>'课程名称',
            'relationship' => 'SobjectInfo',
            'select' => '(:table).soc_name',
        ),
        'score'=>array(
            'title'=>'考试分数',
            'select'=>'score'
        ),
    ),

    //筛选信息
    'filters' => array(
        'so_id' => array(
            'title'=>'编号'
        ),
        'SobjectInfo'=>array(
            'type'    => 'relationship',
            'title'   => '课程名'
            'name_field' => 'soc_name',
        ),
        'StuInfo'=>array(
            'type'  => 'relationship',
            'title' => '学生姓名',
            'name_field'  => 's_name',
        ),
        'score'=>array(
            'title'=>'考试分数',
            'type' => 'number'
        ),

    ),

    //改动、新增
    'edit_fields' => array(
        'StuInfo'=>array(
            'type'  => 'relationship',
            'title' => '学生姓名',
            'name_field'  => 's_name',
        ),
        'SobjectInfo'=>array(
            'type'    => 'relationship',
            'title'   => '课程名',
            'name_field' => 'soc_name',
        ),
        'score'=>array(
            'title'=>'考试分数',
            'type'=>'text'
        ),
    )

);

?>

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

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

效果图例如以下:

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

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

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

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115659.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 监控在服务器中的作用和功能,视频安防监控服务器能实现哪些功能以及解决哪些问题呢…

    监控在服务器中的作用和功能,视频安防监控服务器能实现哪些功能以及解决哪些问题呢…随着物联网的快速发展,视频安防监控服务器开发也在不断的进步,核心技术是进行视频监控服务器开发的重要基础。但由于要满足用户的各种各样的需求,还需要解决很多相关技术。那么视频安防监控服务器能实现哪些功能?解决哪些问题呢?下面就和小编一起来了解下吧。1、操作系统其实操作系统的开发是一个很困难的技术问题,列为核心技术绝不为过,但是正因为难度太大,仅仅为开发视频监控服务器而开发DM642上的操作系统代价太大…

  • Intellij IDEA 2021 Maven 配置指南「建议收藏」

    Intellij IDEA 2021 Maven 配置指南「建议收藏」Maven是Java一个不错的项目管理工具,但在IntellijIDEA软件中配置它却并非一件省心的事情,不少小萌新会配置失败。所以,我打算分享这篇教程,帮助萌新们在IntellijIDEA中配置好Maven~

  • win10共享打印错误0x0000006_win7打印机共享错误0x000006,连接成功,打印测试报错…[通俗易懂]

    win10共享打印错误0x0000006_win7打印机共享错误0x000006,连接成功,打印测试报错…[通俗易懂]win7打印机共享出现错误0x000006,建议一直按住左shift键,然后点击电源的重启,疑难解答-高级选项-启动设置-重启,选择4或者F进入安全模式,在安全模式下将第三方优化软件卸载,清理磁盘。然后回到正常模式,开启上面所述的服务,启动server服务,再次设置打印机共享。打印机(Printer)是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上。打印机共享,也就是平常说的局域网内…

  • PHP 执行时间Fatal error: Maximum execution time of…

    PHP 执行时间Fatal error: Maximum execution time of…

  • (二)selenium的实际运用

    (二)selenium的实际运用

  • 以pptp方式登陆管理单口旁路由

    以pptp方式登陆管理单口旁路由由于入手了下载宝这个单口的千兆网口设备,一直想发挥一下它的余热,比如充当旁路由过滤广告什么的。但是修改脚本等功能必须以Lan口连接方式登录才能实现,这样的话,管理计算机网线不得不在主路由、下载宝之间来回插拔,非常的不方便。因为我的下载宝刷了Hiboy的老毛子固件,它提供了pptp访问方式,这样连接在主路由上的计算机即可通过连接在主路由上的下载宝WAN口ip登录,并实现lan口登录管理的所有功能。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号