【问题标题】:Complex join in laravellaravel 中的复杂连接
【发布时间】:2015-07-14 16:01:05
【问题描述】:

我尝试做以下复杂的连接来获取所有根据学生的部门开始的科目

$studentID  = Student::find($id);

$divisionID = Student::where('id', $studentID->id)->select('division_id')->pluck('division_id');
$payments = Payment::all();
$discounts = Discount::all();

// This the Big join to get all subjects that started according to the student's division
  $subjectStart = SubjectStart::join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id')
                              ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id')
                              ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id')
                              ->join('division' ,'division.id','=','subject_division.division_id')
                              ->where('division.id' ,$divisionID)
                              ->where('lecture_num' ,'>' , 0)
                              ->get();

之后我尝试循环 $subjectStart 如下

@foreach($subjectStart as $st)
   {{$st->id}}
   {{$st->start_date}}
   {{$st->lecture_num}}
   .............
 @endforeach

除了 $st->id 之外,join 的结果显示正确,显示为 division_id 不是 subject_start_id ,例如如果除法 _id = 5,则循环 $subjectStart 的结果,$st->id 将是 5,5,5,.....

有什么建议吗?

【问题讨论】:

    标签: php laravel laravel-4 laravel-5


    【解决方案1】:

    我解决了它只是使用如下的select语句

    // This the Big join to get all subjects that started according to the student's division
      $subjectStart = SubjectStart::join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id')
                                 ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id')
                                 ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id')
                                 ->join('division' ,'division.id','=','subject_division.division_id')
                                 ->where('division.id' ,$divisionID)
                                 ->where('lecture_num' ,'>' , 0)
                                 ->select('subject_start.id', 'subject_start.teach_sub_id', 'subject_start.group_id','subject_start.lecture_num','subject_start.start_date')
                                 ->get();
    

    【讨论】:

      【解决方案2】:

      你只需要用这个覆盖你上面的代码:

        $subjectStart = SubjectStart::selectRaw('subject.start_id AS id, *')
                                ->join('teacher_subject' ,'teacher_subject.id' ,'=','subject_start.teach_sub_id')
                                ->join('subject' ,'subject.id' ,'=' , 'teacher_subject.subject_id')
                                ->join('subject_division','subject_division.subject_id' ,'=' ,'subject.id')
                                ->join('division' ,'division.id','=','subject_division.division_id')
                                ->where('division.id' ,$divisionID)
                                ->where('lecture_num' ,'>' , 0)
                                ->get();
      

      【讨论】:

      • 首先,请告诉我您提到的是哪个('subject.start _id AS id)。其次,您的答案显示此错误: SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误。无论如何,感谢您的评论
      • 你想在哪个表中的哪个字段显示为id?表 subject_start 中的字段 id 还是哪一个?也许那是因为主题表中没有 start_id 字段。对于这种误解,我深表歉意;)
      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多