2016-02-08 68 views
6

讓我喜歡這個 -Laravel 5.2 - 更改數據格式雄辯

$feature_project = FeatureProject::select('feature_id') 
         ->where('project_id', $project->id) 
         ->get(); 

一個模型,如果我回到它,我得到一個輸出像這個 -

[ 
    { 
    "feature_id": 2 
    }, 
    { 
    "feature_id": 4 
    }, 
    { 
    "feature_id": 9 
    } 
] 

但我想t輸出這樣的 -

[2,4,9] 

所以我需要轉換輸出。

但我沒有找到一種方法,而不使用for-each循環(使用臨時數組,將當前數組中的所有元素與for-each循環一起使用)。

但我認爲比Laravel更聰明的做法。

我認爲Laravel Collection是用於此目的。

+0

你試過PHP json_decode()嗎?我認爲應該將這個[[{「feature_id」:2},{「feature_id」:4},{「feature_id」:9}]'轉換爲[[2,4,9]' – Michel

+0

@Michel Eloquent返回一個採集。它僅在響應中被編碼爲json。 – Kaspars

回答

4

您可以在查詢生成器上調用pluck()方法。

$feature_project = FeatureProject::select('feature_id') 
             ->where('project_id', $project->id) 
             ->pluck('feature_id'); // [2,4,9] 

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_lists

或者,你可以使用PHP的array_column()功能爲原料的陣列。 http://php.net/manual/en/function.array-column.php

+0

- > pluck('feature_id');比其他任何選項都好,但列表也是一個很好的答案。但是list()會從laravel 5.3中刪除,所以pluck是最好的答案 –

+0

@AbrarJahin感謝您的信息,我編輯了我的答案。 – Kaspars

0

另一種方法在某些情況下也會有幫助。 我們可以在select函數裏面運行raw查詢。 下面是一個例子:

$feature_project = FeatureProject::select(DB::raw('GROUP_CONCAT("feature_id"))) 
        ->where('project_id', $project->id) 
        ->get(); 

DB::raw,我們可以運行功能和案例一樣MySQL查詢MySQL查詢。

+0

對不起,這是錯誤的答案 –

+0

我可以知道爲什麼它錯了嗎?我已經在使用這種類型的查詢。 – Ali

3

在Laravel的集合中,可以調用一個名爲Flatten的方法,它將多維集合平展爲一個維度。

https://laravel.com/docs/5.2/collections#method-flatten

$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]); 

$flattened = $collection->flatten(); 

$flattened->all(); 

// ['taylor', 'php', 'javascript']; 

具有相當平坦的對象,它應該只返回值。

+0

謝謝,它也是一個很好的選擇。所以我在上調它 –

1

使用pluck()

$feature_project = FeatureProject::where('project_id', $project->id)->pluck('feature_id'); 
0

您可以使用lists()toArray()

$feature_project=FeatureProject::where('project_id', $project->id)->lists('id')->toArray(); 

希望這有助於。