如何在 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函数后可以使用->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 中解码的主要内容,如果未能解决你的问题,请参考以下文章