从关系中获取数据,Laravel

Posted

技术标签:

【中文标题】从关系中获取数据,Laravel【英文标题】:Get data from relationship, Laravel 【发布时间】:2020-07-01 14:23:04 【问题描述】:

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

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

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));

【问题讨论】:

您忘记向我们展示您在这 3 (2?) 个表之间建立的关系。 【参考方案1】:

如果我正确理解您的问题,您希望 question_topics 数据以 json 格式返回响应。

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

【讨论】:

【参考方案2】:

第一 在用于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();

【讨论】:

它有效,谢谢!有什么改变只从最后一个关系中获取名称,而不是整个数组? 是的,有。查看 laravel 资源:laravel.com/docs/5.8/eloquent-resources(另外,如果这是您正在寻找的答案,请将其标记为已接受。谢谢

以上是关于从关系中获取数据,Laravel的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中按模型从数据库中获取数据时如何附加关系

Laravel 雄辩模型如何从关系表中获取数据

无法从 Laravel Eloquent 关系中获取数据

如何使用 Laravel 关系从数据库中获取父元素?

Laravel:如何从具有关系的 3 个表中获取数据

如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)