情景 - 我假设我有数千个帖子,每个帖子有1-1000条评论。 好吧,我可以简单地用10或20对帖子进行评论 这将返回带有注释的分页帖子。
SELECT *
from MyTable
where CASE @CHECKPOINTTYPE
WHEN 'Column1' THEN Column1
WHEN 'Column2' THEN Column2
ELSE NULL
END = 1
问题在于我想对评论进行分页,因此每篇帖子都会返回4条评论。那么,如果帖子有超过4条评论,我如何调用其他评论?
答案 0 :(得分:2)
我认为最好的方法是将帖子存储在单独的表格中。例如,使用以下迁移
创建一个post表Schema::create('posts', function(Blueprint $table){
$table->increments('id');
$table->string('title');
$table->timestamps();
});
现在使用迁移创建评论表:
Schema::create('comments', function(Blueprint $table){
$table->increments('id');
$table->integer('post_id')->unsigned();
$table->string('name');
$table->text('comment_body');
$table->timestamps();
$table->foreign('poem_id')->references('id')->on('posts');
});
在这两个表之间创建一对多关系,如下所示:
对于Post
模型,
class Post extends Model
{
...
public function comments(){
return $this->hasMany('App\Comment');
}
}
和Comment
模型,
class Comment extends Model
{
protected $fillable = ['post_id', 'c_body', 'name'];
public function posts(){
return $this->belongsTo('App\Poem', 'post_id');
}
}
此时,在填充两个数据库表:posts
和comments
之后,您可以在控制器中单独查询它们。
为此,请在控制器顶部添加两行:
use App\Post;
use App\Comment;
现在,您可以在该控制器中选择任何方法,查询每个方法的帖子和评论,如下所示
public function index(){
$posts = Post::where('published',true);
$comments = Post::where('published',true)->comments;
// pass this data to your view
return view('anyview', compact('posts', 'comments');
}
我的答案很长,尽管我试图缩短它。希望它有所帮助。