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'   => '<span style="font-family: Arial, Helvetica, sans-serif;">课程名</span><span style="font-family: Arial, Helvetica, sans-serif;">',</span>
            '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中已建立了它们之间的 一对多关系,因此我们可以自由搭配组合

效果图如下:

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

时间: 2024-10-21 05:05:45

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

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

本例框架很简单:默认页面为用户登录界面login.jsp,提交后由action类LoginAction.java来判断成功或失败,登录结果分别由success.jsp和failure.jsp呈现. 一. 相关文件目录 1.web.xml的目录:StrutsTest\WebContent\WEB-INF\web.xml. 2.struts.xml的目录:StrutsTest\WebContent\WEB-INF\classes\struts.xml. 3.LoginAction的目录:Struts

Hibernate One-to-Many Mappings 一对多关系映射

Hibernate One-to-Many Mappings 一对多关系映射 关键点:一对多关系使用 Set 实现, 例子:一个员工可以有多个学证书. Hibernate框架的使用步骤: 1.创建Hibernate的配置文件(hibernate.cfg.xml) 2.创建持久化类,即其实例需要保存到数据库中的类(Employee.java) 3.创建对象-关系映射文件(Employee.hbm.xml) 4.通过Hibernate API编写访问数据库的代码 创建Hibernate的配置文件(h

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

Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创建实体类Classes和实体类Student Classes.java package com.bjpowernode.hibernate; import java.util.Set; public class Classes { private int id; private String nam

Laravel框架学习(四)

一. composer的安装: 1.Composer是什么? 是 PHP 用来管理依赖(dependency)关系的工具. 你可以在自己的项目中声明所依赖的外部工具库(libraries), Composer 会帮你安装这些依赖的库文件. 2.网址:https://getcomposer.org 下载:https://getcomposer.org/download/ 中国全量镜像:http://pkg.phpcomposer.com/ 启用本镜像服务命令: composer config -g

Laravel框架的体系结构

Laravel被称为“全栈”式框架,因为它能够处理从网络服务到数据库管理.HTML生成的一切事情,垂直集成的web开发环境给开发者提供了更好的体验. 开发人员可以通过命令行工具,生成和管理Laravel项目环境.Laravel附带了一个名为Artisan的优秀的命令行工具,它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理.它是基于强大的Symfony Console 组件开发的. Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性.快乐的开发者才能创

laravel框架入门

本文摘自网络,个人感觉写的很不错,决定收藏一下纯属本人学习之用 本文介绍如何开始使用 Laravel. 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库: Laravel 程序的基本文件结构: MVC(模型,视图,控制器)和 REST 架构的基本原理: 如何快速生成 Laravel 程序骨架: 1 前提条件 本文针对想从零开始开发 Laravel 程序的初学者,不需要预先具备任何的 Laravel 使用经验.不过,为了能顺利阅读,还是需要事先安装好一些软

对laravel框架的理解及认识(摘自百度)

Laravel 框架的认识优点1.laravel的就是为 WEB 艺术家创造的 PHP 框架,它也是php工程化的趋势.2. 社区非常完善,帖子质量都相对都比较高.3.基于composer构建,丰富的扩展包.4.github star在php分类排名第一 针对性能这块呢?我们可以思考一下,php能做的功能java,.net,甚至c++也都能做到吧,那为什么我们还要使用php开发呢,不就是因为php开发比较高效嘛.一个框架好不好不能只从性能上看,还要从开发效率和代码健壮,维护方面来看.larave

PHP 基于laravel框架获取微博数据之二 用户数据的使用

开始抓取微博数据的时候,只是想获得一条热门微博下的所有评论,因为里面有不少图片广告,所以想试试能不能分析出热门微博评论里的异常用户. 使用PHP的Laravel框架后,通过队列.命令等各种功能,最后构架了一套完整的微博用户数据抓取平台,经过一段时间的运行积累了大量数据,那么使用这些数据能做什么呢? 微博数据分析很早就有人在做了,网上采集分析工具貌似有很多,搜索一下想找一些微博数据分析的具体方案.世事变幻,发现很多几年前的微博数据分析平台都不能用了,可能微博数据分析和微博一样在商业上还是没有什么更

laravel框架总结(四) -- 服务容器

1.依赖 我们定义两个类:class Supperman 和 class Power,现在我们要使用Supperman ,而Supperman 依赖了Power class Supperman { private $power; public function __construct(){ $this->power = new Power; } } 一旦Power发生了变化,Supperman 不得不修改,这种就叫耦合程度太高,所以面临的问题是解耦,就需要用到控制反转. 2.依赖注入 只要不是由