2017-06-27 13 views
0

私は今フォーラムをやっています。Laravel - 美的コード、コントローラのデータベースクエリ?

私はコントローラにコードを書きましたが、これを行うには良い方法です(これは純粋なコードです、つまり、私のコードは固いものです)。私は思っていた、多分DBへの私の質問は、モデルにする必要がありますか?これに具体的な方法をするか、これがここにあるのでしょうか?

私はよく分かりませんが、このデータベースクエリはforeach内にある可能性がありますか?フォーラムトピック、どのように多くの記事、どのように多くの答えとの最後のポスト:私がテーブルに持っているしたいのメイン・サイトで

ここでは、コードです:

class ForumController extends Controller 
{ 
    public function mainSite() 
    { 
    $mainData = []; 

    $topics = Topic::all(); 
    $lastPost = []; 

    foreach ($topics as $topic) { 
     $allPosts = Posts::where('topic_id', $topic->id)->count(); 
     $allComments = Comments::where('topic_id', $topic->id)->count(); 

     $post = Posts::select('added_at', 'user_id', 'subject')->where('topic_id', $topic->id)->orderBy('added_at', 'DESC')->first(); 
     $user = ForumUsers::select('name')->where('id', $post['user_id'])->first(); 
     $lastPost[$topic->name]=[$post['added_at'], $post['subject'], $user['name']]; 

     $mainData[] = ['topic' => $topic->name, 'posts' => $allPosts, 'comments' => $allComments]; 
    } 

    return View('forum', ['mainData' => $mainData, 'lastPost' => $lastPost]); 
    } 
} 

そして、ここでは私のビューです:

<table> 
    <tr> 
     <th>Forum</th> 
     <th>How many posts</th> 
     <th>How many answers</th> 
     <th>Last post</th> 
    </tr> 
    @foreach($mainData as $topic) 
      <tr> 
       <td> 
        <a href="{{$topic['topic']}}">{{$topic['topic']}}</a> 
       </td> 
       <td> 
        {{$topic['posts']}} 
       </td> 
       <td> 
        {{$topic['comments']}} 
       </td> 
       <td> 
        @foreach($lastPost[$topic['topic']] as $post) 
        {{$post}} 
        @endforeach 
       </td> 
      </tr> 
    @endforeach 
</table> 

私は初心者です。良いコードを作成する方法や、プログラミングに良い習慣を持たせる方法を教えてください。すべての回答ありがとう!

答えて

1

あまりにも、初心者のために見ることが難しい「魔法」のものがあります。Model::whereMyFieldなどです。たとえば、あなたがプラス

Posts::whereTopicId($topic->id)

にご

Posts::where('topic_id', $topic->id)

を変換することができ、あなたの雄弁モデルで関係を設定することで、すべてのModel::whereを避けることができます。ここにいくつかの読書があります:https://laravel.com/docs/5.4/eloquent-relationships

あなたのコードに//commentsを忘れないでください。それは良い練習ですいくつかのコメントを入れて& PHP doc。

ボーナス:モデルの「魔法」のすべての方法を見つけるのに役立つクールなIDEヘルパーがあります:https://github.com/barryvdh/laravel-ide-helper

関連する問題