繁体   English   中英

雄辩有许多通过多对多(belongsToMany)

[英]Eloquent Has Many Through with Many To Many (belongsToMany)

我有这个给定的表结构:

在此输入图像描述

如何使用eloquent从我的'visita'类访问'curso.name'? 我分配了很多关系,但只能访问' turma.curso_id ',但我想获得类似$visita->curso['nome']

我想知道如何避免需要Curso::all()

在下面添加了一些代码段:

// Class VISITA    
class Visita extends Model
{

      protected $fillable = [
        'id',
        'nome',
      ];

    public function turmas()
    {
        return $this->belongsToMany('App\Models\Turma', 'turma_disciplina_visita')->withPivot('disciplina_id');
    }

}

// Class TURMA
class Turma extends Model
{

    protected $fillable = [
        'id',
        'nome',
        'curso_id',
    ];

    public function curso()
  {
      return $this->belongsTo('App\Models\Curso');
  }

}

// Class CURSO
class Curso extends Model
{

    protected $fillable = [
        'id',
        'nome',
    ];

    public function turmas()
  {
      return $this->hasMany('App\Models\Turma');
  }

}

// Class VISITACONTROLLER
class VisitaController extends BaseController
{

  public function list($request, $response)
  {
    $visitas = Visita::all(); // brings me the visita and the turma with its attributes
    $cursos = Curso::all(); // wanted to get cursos without needing this extra query which brings me all the cursos..

    return $this->view->render($response, 'Visitas/list.php', [
        'visitas' => $visitas,
        'cursos'  => $cursos,
    ]);

  }
}

// View LIST.PHP

// This way I get the turma.nome
foreach ($visita->turmas as $turma){
  echo $turma['nome'] . '<br>';

// This way I get the curso.nome
foreach ($visita->turmas as $turma){
  echo $cursos[$turma['curso_id']] . '<br>';

你有没有试过像这样加载你的集合:

Visita::with('turmas.curso')->all();

在您的前端,您应该能够像这样加载您的数据:

foreach (($visita->turmas as $turma){
    $turma->curso->nome;
}

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM