在laravel中将三个表与关键字组合在一起

时间:2017-11-17 08:59:45

标签: php laravel

我想加入三张桌子。这是服务器中的数据库模型:

lecturers
    id - integer (PK)
    ......

examination
    id - integer (PK)
   .....

exam_supervision
    lecturer_id - integer (FK)
    exam_id- integer (FK)

我在laravel中实现的模型关系。

```

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Examsupervision extends Model {

    public $timestamps = false;

    protected $table = 'exam_supervision';

    protected $fillable = ['lecturer_id', 'exam_id'];
}


<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Examination extends Model {

    public $timestamps = false;

    protected $table = 'examination';

    protected $fillable = ['name', 'module_id', 'startdate', 'enddate', 'duration', 'type', 'code', 'status'];




}

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Lecturers extends Model {

    public $timestamps = false;

    protected $table = 'lecturers';

    protected $fillable = ['user_id', 'address', 'phone'];





}

```

讲师,考试和考试监督,即M:M。我想要的是找到讲师的所有考试。

我的代码

 public function lecturerViewExaminations($id)
  {


what code to get all exam for a lecturer..say ID 129


  }

归我空集。我究竟做错了什么?它在SQL语法中很容易,但在laravel中我发现它非常令人困惑

3 个答案:

答案 0 :(得分:2)

我从你的问题中理解的是:

你有一个模特(Examsupervision),想要关系考试和讲座

您可以使用Eloquent: Relationships

首先创建一个model。在这种情况下,您的模型名称将类似于Examsupervision。 在您的模型(Examsupervision)中,您可以定义您的关系。在这种情况下考试和lextures

为每个关系创建一个新模型。所以你将有3个模型(Examsupervision,Examinations,Lectures)。

现在,在您的模型中,Examsupervision会创建一个新的关系函数。

public function lectures()
{
    return $this->hasMany('App\Lectures');
}
public function examinations(){
   return $this->hasMany('App\Examinations');
}

在您的数据库表&#34;讲座&#34;和&#34;考试&#34;创建名为examsupervision_id的新密钥。此密钥将是Examsupervision行的ID。

现在,在您希望获得给定Examsupervision的所有讲座的代码中,您可以执行此操作。

$examsupervision = Examsupervision::find($id); //$id = the Examsupervision you want to retrieve
$lectures = $examsupervision->lectures; //This will return all the lectures connected to examsupervision

对于考试,你也可以这样做:

$examsupervision = Examsupervision::find($id); //$id = the Examsupervision you want to retrieve
$examinations = $examsupervision->examinations;

希望这有帮助

答案 1 :(得分:1)

在最后一个位置之后,你遗失了->get()

 $examinations= Examsupervision::with('lecturers', 'examinations')->where('lecturer_id', 'id')->where('exam_id', 'id')->get();

答案 2 :(得分:0)

Model::with()用于关系,仅使用->get()

$examinations=Examsupervision::with('lecturers', 'examinations')->get();

您已经拥有lecturersexaminations的关系。

如果不起作用,请分享模型Examsupervision