从关系中获取数据,Laravel
Posted
技术标签:
【中文标题】从关系中获取数据,Laravel【英文标题】:Get data from relationship, Laravel 【发布时间】:2020-07-01 14:23:04 【问题描述】:我有一个查询,我使用 with
获取数据,但在该表中我有另一个关系,我想从中获取数据,但我不确定如何。
我需要的结果在question_topics
和lk_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_topic
、topic_1
、topic_2
和topic_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的主要内容,如果未能解决你的问题,请参考以下文章