ホームページ  >  記事  >  バックエンド開発  >  Php Laravel フレームワークの複数テーブルのリレーションシップ処理 雄弁な 1 対多のリレーションシップ処理

Php Laravel フレームワークの複数テーブルのリレーションシップ処理 雄弁な 1 対多のリレーションシップ処理

WBOY
WBOYオリジナル
2016-06-23 13:47:34949ブラウズ

Php Laravel フレームワークのマルチテーブル リレーションシップの処理 Eloquent の 1 対多のリレーションシップの処理

このブログ投稿では主に、Laravel フレームワークにおける Eloquent の 1 対多のリレーションシップの処理について紹介します。互いに関連しています。たとえば、ブログ投稿に多くのコメントが含まれている場合や、注文が注文を行ったユーザーに関連している場合があります。 Eloquent を使用すると、これらの関係の管理と処理が簡単になります。 Laravel は 4 種類のリレーションシップを提供します: - 1 対 1 - 1 対多 - 多対多 - ポリモーフィックなリレーションシップ

1 対多

1 対多のリレーションシップの例はブログです。コメントの多い投稿やコース、複数のスコア情報などリレーションシップ モデル 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');    }}?>

対応する逆リレーションシップ モデルを定義します:

<?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');        }} ?>
上記の手順の処理を通じて、テーブル間に 1 対多のリレーションシップが確立されました。 Laravel Administrato バックグラウンドでドロップダウン リスト クエリ、バインディング、その他のアプリケーションを実装します

<?phpreturn 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'        ),    ));?>
上記の例は、バックグラウンド スコア情報クラスを示しています。

「生徒名」と「コース名」は別のテーブルに格納されていますが、モデル内で事前に 1 対多の関係を確立しているため、自由に組み合わせることができます。

レンダリングは次のとおりです:



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。