簡體   English   中英

Laravel 連接僅在所有連接表都包含值時出現

[英]Laravel joins only appear when all the joined tables contain values

我有一個課程表和一個content_textscontent_filescontent_videosquizzes表。 所有表格都與課程表相關,具有一對多的關系,其中一個課程表有許多content_textscontent_filescontent_videosquizzes 問題是,當我填寫所有content_textscontent_filescontent_videosquizzes表並且我加入時會顯示所有這些表,但是當我只填寫一個時,我加入的所有表都不會顯示。

這是我的 CurriculumDisplayResource

    <?php

namespace App\Http\Resources;

use App\Models\Curriculum;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\DB;

class CurriculumDisplayResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {




        return [

            'id' => $this->id,
            'title_section' => json_decode($this->title_section),
            'learning_objective'=> json_decode($this->learning_objective),
            'content_detail' =>

                DB::table('curriculums')
                    ->join('content_texts','curriculums.id','=','content_texts.curriculum_id')
                    ->join('content_files','curriculums.id','=','content_files.curriculum_id')
                    ->join('content_videos','curriculums.id','=','content_videos.curriculum_id')
                    ->join('quizzes','curriculums.id','=','quizzes.curriculum_id')
                    ->select('content_texts.title_text','content_texts.text_course',
                        'content_files.title_file','content_files.file_course','content_videos.title_video',
                        'content_videos.video_course',"quizzes.title_quiz",'quizzes.question','quizzes.answer','quizzes.right_answer')
                    ->get(),
            'parent_id' => $this->id,
        ];
    }
}

這是課程控制器

    <?php

    namespace App\Http\Controllers\Course;

    use App\Http\Controllers\Controller;
    use App\Http\Resources\CurriculumDisplayResource;
    use App\Http\Resources\CurriculumResource;
    use App\Models\ContentText;
    use App\Models\Curriculum;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\DB;

    class CurriculumController extends Controller
    {

        public function index()
        {


//            return  CurriculumDisplayResource::collection(
//               DB::table('curriculums')->join('courses','courses.id','=','curriculums.course_id')->select('curriculums.*')->get());
        }


        public function store (Request $request)
        {

            $c = new Curriculum();
            $c->title_section = json_encode($request->get('title_section'));
            $c->learning_objective = json_encode($request->get('learning_objective'));
            $c->user_id = Auth::id();
            $c->course_id = $request->get('course_id');



            $c->save();

                        return response(new CurriculumDisplayResource($c));


        }

        public function show($id)
        {

            $curriculum = Curriculum::findOrFail($id);



            return response($curriculum);
        }


        public function update(Request $request, $id)
        {
            $c = Curriculum::findOrFail($id);
            $c->title_section = json_encode($request->get('title_section'));
            $c->learning_objective = json_encode($request->get('learning_objective'));
            $c->user_id = Auth::id();
            $c->course_id = $request->get('course_id');

            $c->save();

            return response(new CurriculumResource($c));
        }

        public function destroy($id)
        {
           $c = Curriculum::findOrFail($id);
           $c->delete();

           return response(null,204);
        }
    }

要從表課程中獲取所有結果,無論它是否具有關系數據,您都可以使用左連接

無論是否存在關系數據,左連接都會從左“表”中獲取數據:

 DB::table('curriculums')
                    ->leftJoin('content_texts','curriculums.id','=','content_texts.curriculum_id')
                    ->leftJoin('content_files','curriculums.id','=','content_files.curriculum_id')
                    ->leftJoin('content_videos','curriculums.id','=','content_videos.curriculum_id')
                    ->leftJoin('quizzes','curriculums.id','=','quizzes.curriculum_id')
                    ->select('content_texts.title_text','content_texts.text_course',
                        'content_files.title_file','content_files.file_course','content_videos.title_video',
                        'content_videos.video_course',"quizzes.title_quiz",'quizzes.question','quizzes.answer','quizzes.right_answer')
                    ->get(),

您可以使用 eloquent 中的關系以更結構化的方式獲取所有關系

$curriculums = Curriculum:::whit(['contentTexts', 'contentFils', 'contentVideos', 'quizzes'])->get();

其中'contentTexts', 'contentFils', 'contentVideos', 'quizzes'是 class Curriculum中聲明的關系的名稱

課程::class

public function contentText()
{
    return $this->hasMany(ContentVideo::class);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM