【问题标题】:Laravel multiple joins in different tablesLaravel 不同表中的多个连接
【发布时间】:2015-11-20 06:17:47
【问题描述】:

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

我有另一个名为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>  

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

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 的模型并从这个模型中进行连接??
如何指定联接?

【问题讨论】:

    标签: php join laravel-5 eloquent


    【解决方案1】:

    您可以使用'with'关键字来获取相关的表值,而不是使用join关键字。

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

    其中turmas和学科是Professor模型中设置的关系。

    【讨论】:

    • $professorId 来自哪里?我想遍历所有这些并将它们全部列出并显示他们的class/turma/,以防他们有一个或多个。
    • 它返回给我什么?当我尝试dd( {{ $professor }}) 时,我得到了Builder。如何正确访问数据??
    • 如果你想要所有的教授,那么 $professors = \App\Professor::with('turmas', 'disciplines')->get();然后遍历每个教授项目。
    • 它从表turma 中返回与cod_professor.cod_turma 匹配的每一行...你知道告诉我如何添加另一个inner join 子句,除了用belongsToMany 创建的子句吗?类似:from table1 inner join table 2 on table1.id = table2.id AND table1.cod = table2.cod。我怎样才能添加这个AND
    猜你喜欢
    • 2018-07-03
    • 2019-08-11
    • 2016-07-22
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多