Php Laravel框架 多表關係處理 之 Eloquent一對多關係處理

Php Laravel框架 多表關係處理 之 Eloquent一對多關係處理

        本博文主要介紹 Laravel 框架中 Eloquent  對一對多關係的處理以及在 Laravel Administrator(後臺擴展包)中的應用。php

        您的數據庫多是彼此相關的。比方,一篇博客文章可能有不少評論,或者一個訂單與下訂單的用戶相關。Eloquent 使得管理和處理這些關係變得簡單。Laravel 提供了四種類型的關係: -一對一 -一對多 -多對多 - 多態關係node

      一對多

一個一對多關係的樣例是一篇博客文章有不少評論或者一個課程有的屢次分數信息等。數據庫

咱們可以像這樣定義關係模型 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中已創建了它們之間的 一對多關係,所以咱們可以自由搭配組合post

效果圖例如如下:ui



10個Laravel4開發者必用擴展包:
http://blog.csdn.net/yimiyuangguang/article/details/39756115
Laravel Administrator 文檔

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

Laravel4 中文幫助手冊:

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

相關文章
相關標籤/搜索