是否可以从表中返回所有列,但如果字符串(值)包含特定单词,请删除该单词?
例如,我有一个这样的表:
------------------------------------------------- | 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();
谢谢!
答案 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)
}