Конвертировать только один столбец из строки в массив в laravel 5 - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть таблица 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.

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете использовать Мутаторы для него

<?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

Вы можете использовать команду artisan: php artisan make: ресурс Trend --collection Эта команда создаст класс ресурсов. И вы можете изменить данные, прежде чем они будут возвращены в качестве ответа.

<?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));
});
...