如何在 laravel join 中解码

Posted

技术标签:

【中文标题】如何在 laravel join 中解码【英文标题】:How to decode in laravel join 【发布时间】:2021-07-07 04:31:56 【问题描述】:

我有这样的json资源集合

    <?php

namespace App\Http\Resources;

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

class CurriculumDisplayResource extends JsonResource

    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,
                  ];
    

我可以对加入测验的结果进行 json 解码吗?我只想对测验结果进行 json 解码。当我尝试显示这个 json 资源时,结果是这样的

这是控制器

    <?php

namespace App\Http\Controllers\Course;

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

class CurriculumController extends Controller

    public function index()
    
        return Curriculum::all();
    

    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 CurriculumResource($c));

    

我的代码有什么问题?我还为 title_quiz、question、answer 和 right_answer 做了演员表。

【问题讨论】:

get函数后可以使用-&gt;toArray(),不需要使用json_Decode() 完全没变,还是一样 请分享您的代码和回复。 我已经更新了胎面 【参考方案1】:

希望这对您的问题有所帮助。好像你有双引号

在包含 title_quiz、question、answer 和 right_answer 的模型上,添加这行代码(取决于您的模型):

Model.php

public function getTitleQuizAttribute($value)
    return str_replace('\"','', $value);



public function getQuestionAttribute($value)
    return str_replace('\"','', $value);



public function getRightAnswerAttribute($value)
    return str_replace('\"','', $value);



public function title_quiz($value)
    return str_replace('\"','', $value);



public function getAnswerAttribute($value)
    return json_decode($value);

他们会先修改您的字符串,然后将其传递给您的响应

Docs

【讨论】:

在控制器中我这样写 $quiz->title_quiz = (new \App\Models\Quiz)->title_quiz($request->title_quiz); ? 不要在控制器上编辑任何东西,访问器(那个公共功能的东西)只是先修改你的数据然后在你的响应中显示它

以上是关于如何在 laravel join 中解码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中解码 JSON 对象

如何在 laravel 5.3 中解码 base64

如何在关系表laravel 5.8中解码Json数据

如何在laravel刀片中从json解码中回显键名和键值

如何在laravel中将Group By与Join表一起使用[重复]

如何在 Laravel Controller 中创建 SQL Join 语句