雄辩的处理未发布内容的最佳方式

时间:2016-01-27 00:06:57

标签: laravel eloquent laravel-5.1

我试图处理其中一个表格中的列有status的情况,即draftpublished

是否有一种简单的方法可以在模型中以某种方式指定它默认只能获得published个?

如果我能在某些条件下得到drafts那就太棒了。

2 个答案:

答案 0 :(得分:3)

我不确定默认情况下该如何操作,但您可以使用Query Scopes轻松完成此操作。

您可以在模型中定义这些内容,然后在运行您的雄辩查询时调用它们。

例如,您可以像这样设置一个以仅获取已发布的文章:

/**
 * Scope a query to only include published articles.
 *
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopePublished($query)
{
    return $query->where('status', '=', 'published');
}

然后你可以在你的雄辩查询中调用它:

$articles = App\Articles::published()->get();

你也可以链接这些,所以如果你需要在查询中添加任何其他范围,那么你可以添加它们。例如:

$articles = App\Articles::published()->orderBy('created_at')->get();

为草稿文章做同样的事情很容易,只是改变你正在寻找的状态:

/**
 * Scope a query to only include draft articles.
 *
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopeDraft($query)
{
    return $query->where('status', '=', 'draft');
}

像这样使用它:

$articles = App\Articles::draft()->get();

通过上面的链接查看文档,因为您还可以创建一个动态范围,并将您要搜索的文章类型传递给它。

答案 1 :(得分:3)

您要找的是Global Scopes

您之前在Soft Delete Trait的形式中看到了它,它应用全局范围来检索whereNull('deleted_at')上的行

杰克有一篇关于你想要解决的主题的专题文章:

http://softonsofa.com/laravel-5-eloquent-global-scope-how-to/