Laravel - 美学代码,控制器中的数据库查询?

时间:2017-06-27 15:07:17

标签: php laravel

我现在正在做论坛。

我在控制器中编写代码,但我想知道或者这是一个很好的方法(或者这是纯代码,我的意思是我的代码是稳定的等等)。我在想,也许我对DB的问题应该是MODELS?并为此做具体方法,或者这可以在这里?

我不确定,或者这个数据库查询可以在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 个答案:

答案 0 :(得分:1)

Eloquent有一些“神奇”的东西很难为初学者看到,比如Model::whereMyField。例如,您可以转换

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

Posts::whereTopicId($topic->id)

另外,您可以通过在Eloquent模型中设置关系来避免所有Model::where。这里有一些阅读:https://laravel.com/docs/5.4/eloquent-relationships

不要忘记代码中的//comments。这是一个很好的做法tu一些评论&amp; PHP doc。

额外奖励:您有一个很酷的IDE助手,可以帮助您发现模型的所有“神奇”方法:https://github.com/barryvdh/laravel-ide-helper