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

Ken*_*ink 4 php laravel eloquent laravel-5 laravel-5.4

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

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

 -------------------------------------------------
| 身份证 | article_desc | article_link | 活跃 |
|----|------------------------|----------------|-------- |
| 1 | 你好,世界!| http://test.co | 0 |
| 2 | 替换词测试 | http://null.org| 1 |
 -------------------------------------------------

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

在 Laravel (Eloquent) 中有没有办法在不使用 foreach 或其他东西的情况下做到这一点?有没有内置函数?

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

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

谢谢!

Jer*_*dev 6

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;
    });
Run Code Online (Sandbox Code Playgroud)

如果您希望为每个查询替换该值,您可以在模型上为该字段创建一个访问器Article

public function getArticleDescAttribute($value)
{
    return str_replace('ReplaceWord', '', $value)
}
Run Code Online (Sandbox Code Playgroud)

  • @KennyHietbrink `return $article;` 在传递给 `map()` 方法的闭包中丢失。这应该可以解决您遇到的 `null` 问题。 (2认同)