Laravel 5:替换查询结果中的字符串(Eloquent ORM)

时间:2017-07-27 12:07:00

标签: php laravel laravel-5 eloquent laravel-5.4

是否可以从表中返回所有列,但如果字符串(值)包含特定单词,请删除该单词?

例如,我有一个这样的表:

 -------------------------------------------------
| id | article_desc     | article_link   | active |
|----|------------------|----------------|--------|
| 1  | Hello, world!    | http://test.co |    0   |
| 2  | ReplaceWord Test | http://null.org|    1   |
 -------------------------------------------------

ReplaceWord ”应替换为“”(无)。所以ID 2的article_desc应该返回“测试”。

有没有办法在没有使用foreach或其他东西的情况下在Laravel(Eloquent)中这样做?有内置功能吗?

这是我获取此数据的控制器。

return Article::where('active', 1)->orderBy('create_date', 'desc')->get();

谢谢!

1 个答案:

答案 0 :(得分:4)

Eloquent查询返回一个Laravel集合,因此您可以使用map函数循环结果并替换字符串。

return Article::where('active', 1)
    ->orderBy('create_date', 'desc')
    ->get()
    ->map(function ($article) {
        $article->article_desc = str_replace('ReplaceWord', '', $article->article_desc);

        return $article;
    });

如果您希望为每个查询替换值,可以在Article模型上为此字段创建an accessor

public function getArticleDescAttribute($value)
{
    return str_replace('ReplaceWord', '', $value)
}