在php中分离数据的有效方法

时间:2016-12-16 12:45:18

标签: php laravel eloquent

我正在使用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 返回为:

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为这看起来像是一种有效的解决方案。相互之后的三个for loops会产生复杂性O(3n) - > O(n)哪个好,应该快。如果您有非常大的注释,标记和问题集合,我会尝试在SQL级别解决问题,这应该更快,但对于小型结果集,这应该足够好。

Big O notation

答案 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();

Docs