Toggle navigation
菜菜小站
菜菜小站
前端开发
前端开发
前端基础
bootstrap
JavaScript
后端开发
后端开发
php开发
laravel
数据库
编辑器
git
服务器
服务器
https
cos云存储
ubuntu
homestead
微信开发
微信开发
微信小程序
python开发
python开发
python基础
关于
laravel-admin列表中取多对多中间表字段
作者:
菜菜子
|
时间:2018-08-04 12:46:09 |
分类:
前端开发
|
访问: 1,707 次|
评论:
0 评论
一个场景,学校可以开多门课程,一个学生可以选多门课,同时一门课可以被多个学生选择,这样就属于多对多的关系,然后这门课老师后期还要给学生成绩,记录到课情况,这样这些信息就得记录在中间表中。展示的时候得把这些中间表字段进行展示 ### 数据库设计 课程表 ```php increments('id'); $table->unsignedInteger('course_id'); $table->string('name'); $table->tinyInteger('question_num')->comment('题目数量'); $table->tinyInteger('active')->default(0)->comment('状态:1发布中,0未发布'); $table->date('start_at')->comment('上课起始时间')->nullable(); $table->date('end_at')->comment('上课结束时间')->nullable(); $table->tinyInteger('chapter_type')->default(0)->comment('项目类型 0正常项目 1补考项目'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('chapters'); } } ``` 学生表 ```php increments('id'); $table->string('student_number')->comment('学号')->unique(); $table->string('nickname')->comment('昵称')->nullable(); $table->enum('gender',['男','女'])->comment('性别')->nullable(); $table->unsignedInteger('department_id')->comment('学院id')->nullable(); $table->unsignedInteger('class_id')->comment('班级id')->nullable(); $table->timestamp('enter_time')->comment('入学时间')->nullable(); $table->tinyInteger('active')->comment('账号状态:1正常,0冻结')->default(1); $table->string('password'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('students'); } } ``` 中间表 ```php increments('id'); $table->unsignedInteger('chapter_id'); $table->unsignedInteger('student_id'); $table->unsignedInteger('batch_id')->nullable()->comment('批次id');; $table->unsignedInteger('reservation_date_id')->nullable()->comment('预约日期id'); $table->date('reservation_date')->nullable()->comment('预约日期'); $table->unsignedInteger('sit_num')->nullable()->comment('座位号'); $table->unsignedInteger('status')->default(0)->comment('状态 0未上(开)课 1正常 2迟到 '); $table->timestamp('attend_time')->comment('上课打卡的时间')->nullable(); $table->timestamp('over_time')->comment('下课打卡的时间')->nullable(); $table->unsignedInteger('operation_score')->default(0)->comment('操作分'); $table->unsignedInteger('report_score')->default(0)->comment('报告分'); $table->timestamps(); }); \DB::statement("ALTER TABLE `student_chapters` comment ''"); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('student_chapters'); } } ``` ### 模型 学生模型student.php ```php //该生预约的实验课及其日期批次信息 public function chapter() { return $this->belongsToMany(Chapter::class, 'student_chapters')->withPivot( 'batch_id', 'reservation_date_id', 'reservation_date', 'sit_num', 'status', 'attend_time', 'over_time' ); } ``` 课程模型Chapter.php ```php public function students() { return $this->belongsToMany(Student::class, 'student_chapters','chapter_id')->withPivot( 'batch_id', 'reservation_date_id', 'reservation_date', 'sit_num', 'status', 'attend_time', 'over_time'); } ``` ### laravel-admin控制器修改 课程控制器ChapterController.php 列表grid方法里面 ```php $grid->actions(function ($actions) use ($courseId) { $keyId = $actions->getKey(); $actions->prepend('
'); $actions->prepend('
实验课学生管理
'); $actions->disableDelete(); }); ``` 添加路由routes.php ``` $router->resource('course/chapter/{chapter_id}/student','Lab\Course\ChapterStudentController');//实验项目的学生 ``` 这门实验课的学生ChapterStudentController.php ```php header('实验课学生'); $content->description('列表'); $content->body($this->grid($chapterId)); }); } /** * Edit interface. * * @param $id * @return Content */ public function edit($id) { return Admin::content(function (Content $content) use ($id) { $content->header('实验课学生'); $content->description('编辑'); $content->body($this->form()->edit($id)); }); } /** * Make a grid builder. * * @return Grid */ protected function grid($chapterId) { #传入的模型改为Chapter::find($chapterId) return Admin::grid(Chapter::find($chapterId), function (Grid $grid) { #找到该课所有student $grid->model()->students(); $grid->id('ID')->sortable(); $grid->nickname('姓名'); #获取pivot $grid->pivot('座位号')->display(function ($pivot) { return $pivot['sit_num']; }); #获取预约日期 $grid->reservation_date('预约日期')->display(function () { return $this->pivot['reservation_date']; }); $grid->batch_id('批次')->display(function () { $batch_id = $this->pivot['batch_id']; }); $grid->attend_time('上课打卡时间')->display(function () { return $this->pivot['attend_time']; }); $grid->attend_time('下课打卡时间')->display(function () { return $this->pivot['over_time']; }); $grid->filter(function ($filter) { $filter->disableIdFilter(); }); }); } } ```
标签:
laravel
,
laravel-admin
还不快抢沙发
添加新评论
昵称(必填)
邮箱(必填)
网站(选填)
内容(必填)
提交评论
最新文章
ubuntu自动化安装php文件
laravel 操作redis
laravel-admin静态资源加速
laravel-admin1.6版本表单tag bug修复方法
laravel根据另外一列的值赋予grid某一列editable()
laravel-admin数据来源非数据表信息
laravel判定多对多关系是否存在
最新回复
森木志: 对的 用的就是这个版本 我看plugin.php的...
菜菜子: 插件版本呢?应该用https://github.com...
森木志: 忘记说了,typecho版本是1.2.1,php版本是...
森木志: 遇到灵异事件了,设置是没问题的,按道理来说上传成功后的...
局外人: 下载失败了,大佬帮忙看看是什么原因呢?
青丝: 7355763
菜菜子: 我好像沒有做這個提示,方便加微信吧,我看看什麼問題
青丝: 对的,提示需要8.0PHP
菜菜子: 你版本不對吧
菜菜子: 你是typecho1.2?用的是https://git...
标签
前端框架
bootstrap
laravel5
laravel-admin
laravel
微信小程序
gd库
git
wamp配置
https
表单
cos小工具
微信支付
ajax
cos
cos插件
vue
nginx
homestead
linux
ubuntu
swoole
typecho
编辑器
破解
数组
jwt
sql语言
腾讯云
邮件发送
websocket
队列
微信公众号
分页
日志
elasticsearch
wnmp
vagrant
无限极分类
分销
集合
supervisor
部署
grid
redis
python
标签
刷新
加密处理
验证码
悬浮框
权限控制
markdown
shell
mysql
测试
ui
任务调度
定时任务
deployer
gogs
反向代理
ftp
归档
2019年01月
2018年12月
2018年11月
2018年10月
2018年09月
2018年08月
2018年07月
2018年06月
2018年05月
2018年04月
2018年03月
2017年09月
2017年06月
2017年05月
2017年04月
2017年03月
2017年02月
2017年01月
2016年12月
2016年11月
友情链接
空
//