【问题标题】:combine three tables with keyword with in laravel在 laravel 中将三个表与关键字 with 结合起来
【发布时间】:2017-11-18 11:53:25
【问题描述】:

我想加入三个表。这是服务器中的数据库模型:

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 中我发现它很混乱

【问题讨论】:

  • 共享模型关系?
  • 完成..请查看编辑
  • 你还没有创建任何关系
  • 好,现在在模型Examsupervision 2中创建新关系

标签: php laravel


【解决方案1】:

我从你的问题中了解到:

你有一个模型(Examsupervision)并且想要关系考试和讲座

您可以使用Eloquent: Relationships

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

为每个关系创建一个新模型。因此,您将拥有 3 个模型(Examsupervision、Examinations、Lectures)。

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

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

在您的数据库表“讲座”和“考试”中创建一个名为 examsupervision_id 的新键。该键将是 Examsupervision 行的 id。

现在在您的代码中,当您想要获取给定考试监督的所有讲座时,您可以执行此操作。

$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;

希望对你有帮助

【讨论】:

  • @webion123 :你没有听从温布尔登所说的。创建模型关系
  • @webion123 你没有创建任何关系。在您的 Examsupervision 模型中创建关系
【解决方案2】:

您在最后一个 where 之后缺少 -&gt;get()。

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

【讨论】:

  • 仍然为空[]集
  • 列lecturer_id 是否存在于lecturers 和exam_id 上examinations 或者它们是否在Examsupervision。如果他们不在Examsupervision 中,请查看laravel.com/docs/5.5/eloquent-relationships#eager-loading 上的Constraining Eager Loads
  • 请分享Examsupervision模型
【解决方案3】:

Model::with() 用于关系,只使用-&gt;get()

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

您已经与lecturers 和examinations 建立了关系。

如果不行,分享模型Examsupervision

【讨论】:

  • @webion123 : 如果有任何关系,请分享您的模型?
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 2020-02-07
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多