所以我想在laravel中建立一个论坛,
到目前为止,我完成了所有用户工作。现在我只是想为论坛考虑一个像样的数据库结构。
我在想这样的事情
里面有子类别和内部子类别的类别你有帖子和帖子里面你有评论,所以我会这样做
forum_categories
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->integer('parent_id')->unsigned()->nullable();
$table->foreign('parent_id')->references('id')->on('forum_category')->onDelete('cascade');
$table->string('slug')->unique();
$table->string('category_name');
$table->string('category_description');
$table->datetime('locked')->nullable();
$table->datetime('deleted')->nullable();
$table->integer('disabled_by')->unsigned()->nullable();
$table->timestamps();
现在我将使用主要类别的类别以及子类别,现在没有问题,但是我使用类别名称作为slugs,因为我不喜欢URL中的IDS但这会导致问题,当我拉子类别的信息
我必须查询数据库中哪个类别包含slug $ slug,然后选择id然后再执行查询哪些行包含id
$cat = ForumCategory::whereSlug($slug)->select('id')->firstOrFail();
$category = ForumCategory::whereNull('deleted')->whereParentId($catId)->get();
这是一种糟糕的做事方式吗?如果我只是使用IDS,那将是1个查询。
答案 0 :(得分:2)
https://laravel.com/docs/5.1/eloquent-relationships
我认为你必须使用雄辩的关系。阅读文档。
答案 1 :(得分:0)
好吧,所以Arigna是正确的我使用相同的表建立关系,然后只是做同样的查询但是!我的软删除方法被忽略了,因为在执行此操作时,您无法添加任何额外的查询修改。
所以我还必须在模型上设置软删除
我最终得到了这个
public function subcategory($slug)
{
$category = ForumCategory::whereSlug($slug)->first();
$category->ForumSubCategory();
return view('forum.index', [
'category' => $category->ForumSubCategory,
]);
}