猿问

对来自 db 的所有消息使用一种方法

我有一个表,我想使用一种或多种方法从 db 中获取所有结果。此方法可以将#hashtags 更改为链接,将 bbcode 更改为 html 标签等。假设我有以下查询:


$query = Comments::orderBy('created_at', 'desc')->get();

评论表有一个评论栏,用户可以在其中使用表情符号 bbcode 等。此查询返回一些结果。我如何在列上使用方法?如果我有一个结果很简单:


$query = Posts::find(1);

$desc = myMethod($query->desc);


开心每一天1111
浏览 148回答 2
2回答

慕婉清6462132

我假设你想格式化你的雄辩属性?看看https://laravel.com/docs/5.8/eloquent-mutators如果您不想将格式化的数据保存在 db 上。您可以通过定义访问器来使用它。例如,请参见下文// on your model you just need to create new methods // with `get` as prefix and `Attribute` as suffixpublic function getBbcToHtmlAttribute() {    return myMethod($query->desc);}请注意,get并且Attribute在您的方法名称上是必需的(例如 getMyNewAccessorAttribute`之后,您需要添加casts属性。如果您已经有 casts 属性,则只需将其添加到数组中,如果您没有 casts 属性,则需要定义它。protected $casts = [    'BbcToHtml'];然后您可以在模型实例的任何位置使用它。$query = Posts::find(1);$desc = $query->bbctohtml;

狐的传说

正如 MarkB 所说,您需要使用一个 mutator,创建一个可以接受任何输入并为您的 bbcode 生成正确 html 代码的辅助类。然后你会在你的模型上创建一个 mutator 并使用它而不是 bbcode 文本所在的字段。
随时随地看视频慕课网APP
我要回答