从关系中获取数据,Laravel

时间:2020-03-20 12:36:37

标签: laravel eloquent laravel-7

我有一个查询,我在哪里使用with来获取数据,但是在该表中我有另一种关系,并且我想从中获取数据,我不确定如何。

我需要的结果在question_topicslk_answers之间(我有topic_1,topic_2 ...的名称)

enter image description here

public function index(Request $request)
{
    $query = Question::select(['id', 'free_text', 'title', 'topics_id', 'created_at']);
    $query->with('question_topics');
    $query->question_topics->with('lkp_answers');  // something like that, but this line is not working.
    return response()->json($query->paginate(5));
}

2 个答案:

答案 0 :(得分:1)

第一 在用于question_topics的模型上,您需要定义best_match_topictopic_1topic_2topic_3的关系:

例如QuestionTopic

class QuestionTopic {
    public function bestMatchTopic() {
        return $this->belongsTo(Topic::class, 'best_match_topic');
    }

    public function topicOne() {
        return $this->belongsTo(Topic::class, 'topic_1');
    }

    public function topicTwo() {
        return $this->belongsTo(Topic::class, 'topic_2');
    }

    public function topicThree() {
        return $this->belongsTo(Topic::class, 'topic_3');
    }

}

然后,如果要获取某个关系的关系,可以使用点符号来访问它们:

Question::with('question_topics.bestMatchTopic', 
                   'question_topics.topicOne', 
                   'question_topics.topicTwo', 
                   'question_topics.topicThree')->get();

答案 1 :(得分:0)

如果我正确理解了您的问题,则希望在json中返回question_topics数据返回响应。

public function index(Request $request)
{
    $query = Question::select(['id', 'free_text', 'title', 'topics_id', 'created_at']);
    $query->with('question_topics');
    return response()->json($query->paginate(5));
}

这将为您提供一个Question数组,在每个Question对象中都有一个question_topics数组。循环迭代类似于php $loop_raw->question_topics->best_match_topic