2016-04-14 22 views
0

Laravel 5.1'i kullanarak ilgili sorularla birlikte bir dizi kategori alıyorum.Belirtilen değer dizisine nesne dizisini düzleştirme

$categories = Category::with(['questions'=>function($query){ 
     $query->select('id', 'category_id'); 
    }])->get(); 

Bu beni alır:

Ben ancak select işe gitmek için, ben katılmak sütun, nam category_id belirtmek gerekir, iç içe soruların sadece isimler istiyorum

[ 
{ 
    "id": 1, 
    "category": "Anatomy", 
    "created_at": "2016-04-13 00:46:12", 
    "updated_at": "2016-04-13 00:46:12", 
    "questions":[ 
    {"id": 1, "category_id": 1}, 
    {"id": 2, "category_id": 1}, 
    {"id": 3, "category_id": 1}, 
    {"id": 4, "category_id": 1}, 
    ... 
    ] 
}, ... 
] 

bunun güzel olacağını, böylece questions : [ sadece nesnelerin yerine kimlikleri içeren alabilirsiniz nasıl

[ 
{ 
    "id": 1, 
    "category": "Anatomy", 
    "created_at": "2016-04-13 00:46:12", 
    "updated_at": "2016-04-13 00:46:12", 
    "questions":[ 
    1, 2, 3, 4 ... 
    ] 
}, ... 
] 

Harita kullanarak toplamaya ve kimlikleri listelemeye çalıştım. Bu işe yaramazsa: Ben önyüzü ile halletmek gerek kalmaz

$test = collect($categories)->map(function ($q) { 
     return collect($q)->lists('id')->toArray(); 
    }); 

Burada bu işlemek için tercih ediyorum.

+0

Sunucunuzu kullanarak, kodunuzu DRY olarak kullanmayı düşünün. İşte bir tane: https://github.com/thephpleague/fractal – Mysteryos

cevap

0

İşte bunu yapmanın basit bir yolu. İşte

bir örnek verilerde verilerine göre sadece o burada
[ 
{ 
    "id": 1, 
    "category": "Anatomy", 
    "created_at": "2016-04-13 00:46:12", 
    "updated_at": "2016-04-13 00:46:12", 
    "questions":[ 
    {"id": 1, "category_id": 1}, 
    {"id": 2, "category_id": 1}, 
    {"id": 3, "category_id": 1}, 
    {"id": 4, "category_id": 1} 
    ] 
} 
] 

çoğaltmak çıktı bu

[ 
    { 
    "id": 1, 
    "category": "Anatomy", 
    "created_at": "2016-04-13 00:46:12", 
    "updated_at": "2016-04-13 00:46:12", 
    "questions": [ 
     1, 
     2, 
     3, 
     4 
    ] 
    } 
] 

gibi görünecek PHP kodu

# JSON DATA 
$data = '[ 
{ 
    "id": 1, 
    "category": "Anatomy", 
    "created_at": "2016-04-13 00:46:12", 
    "updated_at": "2016-04-13 00:46:12", 
    "questions":[ 
    {"id": 1, "category_id": 1}, 
    {"id": 2, "category_id": 1}, 
    {"id": 3, "category_id": 1}, 
    {"id": 4, "category_id": 1} 
    ] 
} 
]'; 

# convert to array 
# $data = json data 
$categories = json_decode($data, true); 

# assuming the categories has a list of object 
# so i need to override it all 
foreach ($categories as $key => $category) { 

    # map a new array 
    $list = array_map(function ($data) { 
     return $data['id']; 
    }, $category['questions']); 
    # assign it to the current object being 
    # iterated the new array created from 
    # the array_map 
    $categories[$key]['questions'] = $list; 

} 

olduğunu eğer J içinde olmak için json_encode ($ kategoriler)'dan faydalanın. SON FORMATI

Yardım edin.

İlgili konular