在 laravel 5 中仅将一列从字符串转换为数组

Convert only one column from string to array in laravel 5

我有一个 table trend,其中有一列 hashtags 用于存储逗号分隔值。我想获取趋势数据并希望 hastags 列作为数组。

使用 eloquent 如下。

$singleData = Trend::find($id);

我暂时低于结果。

{
    "status": "200",
    "isError": false,
    "data": {
        "message": "Trend found.",
        "singleData": {
            "id": 1,
            "title": "first trend",
            "start_date": "2018-11-16",
            "end_date": "2018-11-16",
            "slug": "first-trend",
            "hashtags": "first,trend,second",
            "created_by": 1,
            "status": false,
            "created_at": "2018-11-16 00:00:00",
            "updated_at": "2018-11-19 08:51:20"
        }
    }
}

我想要的结果如下

{
    "status": "200",
    "isError": false,
    "data": {
        "message": "Trend found.",
        "singleData": {
            "id": 1,
            "title": "first trend",
            "start_date": "2018-11-16",
            "end_date": "2018-11-16",
            "slug": "first-trend",
            "hashtags": [
                "first",
                "trend",
                "second"
                ],
            "created_by": 1,
            "status": false,
            "created_at": "2018-11-16 00:00:00",
            "updated_at": "2018-11-19 08:51:20"
        }
    }
}

我在 TrendController.

中使用以下代码得到了这个结果

$singleData->hashtags = explode(',', $singleData->hashtags);

但如果可能的话,我想要更好的方法来使用 eloquent。

你可以用Mutators

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Trend extends Model
{
    /**
     * Get the trend's hashtag.
     *
     * @param  string  $value
     * @return string
     */
    public function getHashtagttribute($value)
    {
        return explode(',', $value);
    }
}

现在它将像这样工作:

$trend->hashtag; // array

或者如果您将它用于 API,您可以使用 Eloquent: API Resources

你可以使用 artisan 命令:php artisan make:resource Trend --collection 此命令将创建资源 class。您可以在数据作为响应返回之前修改数据。

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class User extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'hashtags' => explode(',', $singleData->hashtags),
        ];
  }
}

您可以像这样使用它:

use App\User;
use App\Http\Resources\Trend as TrendResource;

Route::get('/trend', function () {
    return new TrendResource(Trend::find(1));
});