我正在使用Laravel,我想使用Eloquent检索数据。
我的控制器:
Mkt Date Property Cat REV RN
Germany JUL 16 JohnS Ltd DLX 155 60
Germany JUL 16 JohnS Ltd SUP NULL 250
正如您所看到的,我觉得使用 public function getquesdet(){
$id = Request::input('id');
$question = Question::where('q_id','=',$id)->with('qtags.tags')->with('comments')->with('answers')
->first();
$i=0;
$tagnames[]=0;
foreach ($question['qtags'] as $value) {
$tagnames[$i] = $value['tags']['tag'];
$i++;
}
$j=0;
$comments[]=0;
foreach ($question['comments'] as $value) {
$comments[$j] = $value['comment'];
$j++;
}
$k=0;
$answers[]=0;
foreach ($question['answers'] as $value) {
$answers[$k] = $value['answer'];
$k++;
}
return array('question'=>$question['title'],'body'=>$question['body'],'tags'=>$tagnames,'comments'=>$comments,'answer'=>$answers);
}
循环效率不高。使用foreach
循环可能需要更多时间。我想要的只是知道如果有任何有效的解决方法。
for
返回为:
答案 0 :(得分:1)
我认为这看起来像是一种有效的解决方案。相互之后的三个for loops
会产生复杂性O(3n)
- > O(n)
哪个好,应该快。如果您有非常大的注释,标记和问题集合,我会尝试在SQL级别解决问题,这应该更快,但对于小型结果集,这应该足够好。
答案 1 :(得分:0)
如果您想要从表中选择列,则可以使用select()
方法:
$question = Question::where('q_id','=',$id)
->select('title', 'body')
->with([
'qtags' => function($q) {
$q->select('tag');
},
'qtags.tags' => function($q) {
$q->select('comment');
},
'answers' => function($q) {
$q->select('answer');
}
])
->first();
然后你可以把它作为数组返回:
return $question->toArray();