正确查询Laravel?

时间:2016-04-17 03:08:06

标签: php mysql database laravel

所以我想在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个查询。

2 个答案:

答案 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,
        ]);
}