在 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));
});
我有一个 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));
});