我现在正在做论坛。
我在控制器中编写代码,但我想知道或者这是一个很好的方法(或者这是纯代码,我的意思是我的代码是稳定的等等)。我在想,也许我对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>
我是初学者,请告诉我如何做好代码的提示,或者如何在编程中养成良好习惯。谢谢你的回答!
答案 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