【问题标题】:Laravel 5: Replace string in query results (Eloquent ORM)Laravel 5:替换查询结果中的字符串(Eloquent ORM)
【发布时间】:2017-07-27 20:16:03
【问题描述】:

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

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

------------------------------------------------- |编号 |文章描述 |文章链接 |活跃 | |----|------------------|----------------|-------- | | 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();

谢谢!

【问题讨论】:

  • 您希望这个词被永久替换(在数据库中)还是仅在使用Article 模型时替换?
  • 只有在使用 Article 模型时,我也不希望它在 DB 中被替换。

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


【解决方案1】:

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)
}

【讨论】:

  • 嘿,非常感谢您的评论。这将返回:[ null, null, null, null ] 对于访问器,似乎很有趣,但我只需要它来进行此查询:-(
  • @KennyHietbrink return $article; 在传递给 map() 方法的闭包中丢失。这应该可以解决您遇到的null 问题。
猜你喜欢
  • 2018-06-13
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2017-03-10
  • 2022-01-17
  • 2015-07-13
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多