Laravel多个连接在不同的表

时间:2015-11-20 06:17:47

标签: php join laravel-5 eloquent

我有这些表:
ProfessorTurmaDiscipline。 (Turma = class)。

我有另一个名为professor_turma的表,它是professorturma之间的一个转轴。在此表格中,我有一些键:cod_professorcod_turmacod_discipline

对于professor_turma内的每一行,我需要提供Turma表的内容以及professor表中教授的名称。

事情是:我只有一种关系,我不能改变它。所以我尝试使用belongsToMany,但我无法获得所需的所有数据。使用以下代码,我可以列出所有教授的名字,但我无法得到Turma他们的教学。

我的模特

class Professor extends Model
{
    protected $table = "professor";
    protected $primaryKey = 'cod_professor';

    public function turmas()
    {
        return $this->belongsToMany('App\Turma', 'professor_turma','cod_professor', 'cod_turma')->withPivot('CH','ano_semestre');
    }
}

我的控制器

class ProfessorController extends Controller
{
    public function getProfessorList()
    {
        $professor = \App\Professor::all();
        return View::make('professor', compact('professor'));
    }
}

我的观点

<ul>
    @foreach($professor as $prof)
        <li>
            <h3 data-id="{{ $prof->cod_professor }}" class="prof-name">{{ $prof->cod_professor }} - {{ $prof->nome }}
                <input type="checkbox" name="" value="" class="check_prof" />
            </h3>

            @if(count($prof->turmas()->get()))
                <ul class="list-disc">
                    @foreach($prof->turmas as $disc)
                        <li data-dia="{{ $disc->dia_semana }}" data-time="{{ $disc->hr_inicio}}" data-id="{{ $disc->cod_disciplina }}">{{ $disc->nome_disciplina }}</li>
                    @endforeach
                </ul>
            @endif
        </li>
    @endforeach
</ul>  

我mannualy构建了一个查询,我真正需要的是这样的东西(我真的不知道如何指定连接,如下面的查询中的连接):

SELECT DISTINCT professor.nome, professor_turma.cod_professor, professor_turma.cod_turma, professor_turma.cod_disciplina, turma.nome_disciplina
FROM professor_turma
INNER JOIN professor ON professor_turma.cod_professor = professor.cod_professor
INNER JOIN turma ON professor_turma.cod_turma = turma.cod_turma AND professor_turma.cod_disciplina = turma.cod_disciplina
WHERE professor_turma.cod_professor =  ?  

也许创建professor_turma的模型,从这一个我加入? 我怎么能指定连接?

1 个答案:

答案 0 :(得分:0)

您可以使用&#39;而不是使用加入关键字。用于获取相关表值的关键字。

$professor = Professor::with('turmas', 'disciplines')->find($professorId);

其中turmas和学科是教授模型中设定的关系。