繁体   English   中英

如何在laravel eloquent中加入三个表

[英]How to join three tables in laravel eloquent

我想加入三个表:sections table: sectionid text formid

问题表:questionid question formid sectionid

选项表:optionid option questionid

我想获取 formid=x 的所有部分(例如)以及与 sectionid 相关的问题和与 questionid 相关的选项。

               $data=Section::with('questions','options')
                            ->where('formId',$formId)
                            ->orderBy('sectionid')
                            ->get()
                            ->toJson();

我在 model 部分中创建了两个关系。 One to joining Section model to Question model and other one to join Section Model to Option model through Question model.

class Section extends Model
{
  use HasFactory;
  protected $primaryKey='sectionid';
  public function options(){
      return $this->hasManyThrough(Option::class,Question::class,'sectionid','questionid');

}
public function questions(){
    return $this->hasMany(Question::class,'sectionid');
}

}

我的 Controller:

            $data=Section::with('questions','options')
                            ->where('formId',$formId)
                            ->orderBy('sectionid')
                            ->get()
                            ->toJson();

它工作正常:)

Laravel 文档: https://laravel.com/docs/8.x/queries#joins

根据您的需要:

$data = Section::where('formid', x)
            ->join('questions', 'sections.sectionid', '=', 'questions.sectionid')
            ->join('options', 'options.optionid', '=', 'questions.optionid')
            ->select('sections.*', 'questions.question as question', 'options.option as option')
            ->get();

笔记:

  1. 不要从所有表中获取 *,在大多数情况下,您可能会遇到模棱两可的列错误
  2. 您的编码风格不遵循惯例,这是非常糟糕的做法。 遵循惯例在很多方面都有帮助。

暂无
暂无

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

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