Laravel中多对多很好实现,但是新手使用多对多经常报错,这里讲一下用法
多对多就是利用两张表每张的一行能找到对应表的多行,那么他和一对多的区别就在一对多表中的一行能找到另一张表的多行,而反过来却不行。
一对多,例如一个教室有很多学生,那么这个教室就是一,学生就是多,反过来,学生只能找到这一个教室。
多对多,例如,有学生和活动两个表,一个学生可以参加多个活动,一个活动也可以有多个学生参加。
那么,在Laravel中多对多怎么实现呢?
首先,你得有三张表,例如
Students表,有字段id
Actives表,有字段id
Stu_act表(该表负责联系学生表和活动表)有字段student_id和act_id
然后使用命令行
php artisan make:model Student
php artisan make:model Active
这样你就创建了两个model
如果我们想通过一个活动,找到报名的学生信息,那就,在app/Active.php里面
<?php namespace App; use Illuminate\Database\Eloquent\Model; class SchoolActive extends Model { protected $table = 'actives'; public function belongsToManyStudent() { return $this->belongsToMany('App\Student', 'Stu_act', 'act_id', 'student_id'); //这里要注意,Student前必须加APP\,还有就是第二个参数是表名,数据库里那个表叫啥,他就叫啥,第三个参数是本类的字段,第四个参数是要查找的字段 } }然后再控制器中使用这个多对多
public function apply($id){ $act=SchoolActive::find($id);//请注意,这里必须是单一的结果才行,否则告你function belongsToMany不存在 $result=$act->belongsToManyStudent()->get(); // dump($result); return view('home.myschool_elite.apply') ->withStudent($result); }
然后直接在模板就可以用你查到的数据了,是不是很神奇!例如在模版中输出学生电话
@foreach($student as $s) 学生电话:{{$s->mobile}} @endforeach