默认情况下,根据原始查询向Eloquent Collection添加行



在我的Eloquent集合中,我想添加一个名为"editable"的额外列。"可编辑"应该包含在我在某些模型上运行的每个查询中。"Editable"根据原始查询显示为真或假。

所以我有一个应该在我的模型上的每个查询中运行的查询。给我的收藏增加了一列。"editable"的值由原始查询决定。

最好的方法是什么?

您可以在查询链中添加一个addSelect()方法,以包含自定义属性。

之类的
$results = YourModelClass::select("*")
    ->addSelect(DB::raw("IF(condition,1,0) AS editable"))
    ->get();

在上面的情况下,您将用相关的SQL语句替换condition,该SQL语句将作为查询的一部分逐行计算。如果语句为真,则editable = 1,如果为假,则每一行返回editable = 0到您的集合。

编辑:我刚刚看到你想要这个每一个查询,所以你可能需要一个全局作用域/trait为你的模型,但上述技术包括额外的属性应该是正确的。

我不会复制/粘贴关于添加全局作用域的文档,它在Laravel的核心文档中,我相信你可以找到它。

你可以给你的模型添加一个自定义的getter:

public function getEditableAttribute()
{
    /* return result from your raw query here */;
}

最新更新