2014-12-10 15 views
11

Dayle Rees'in Code Bright adlı kitabını okudum Eloquent Collection s Laravel. Başka bir araştırma yaptım ama aradığım cevabı bulamadım.Belirli bir dizin numarasında Laravel'de Koleksiyon Nesnesine nesne (Model türü nesne) nasıl eklenir?

Nesneyi belirli bir konumda Collection Nesnesine eklemek (Model yazı tipi nesnesi). Örneğin

:

Bu [present_day] Yukarıda görebileceğiniz gibi 1 to 5 arasında değişen bir değere sahip döndürülen koleksiyonu

Illuminate\Database\Eloquent\Collection Object 
(
    [0] => Attendance Object 
     ([present_day] => 1) 

    [1] => Attendance Object 
     ([present_day] => 2) 

    [2] => Attendance Object 
     ([present_day] => 4) 

    [3] => Attendance Object 
     ([present_day] => 5) 

) 

olmakla birlikte, değer, 3 sırayla eksik. Şimdi, gerçekten yapmak istediğim şey, Attendance Object numaranın [2] dizin numarasının/konumunun Koleksiyon Nesnesi konumuna açık bir şekilde koymak ve böylece Katılım Nesnesi'nin geri kalanını itmek. Bunu yapmak için gerçekten çok uğraşıyorum. Ben koleksiyon nesnesi yukarıda yapmak için bunu yapabilirsiniz nasıl aşağıdaki gibi bir şeye benzemeye:

Illuminate\Database\Eloquent\Collection Object 
(
    [0] => Attendance Object 
     ([present_day] => 1) 

    [1] => Attendance Object 
     ([present_day] => 2) 

    [2] => Attendance Object // This is where new object was added. 
     ([present_day] => 3) 

    [4] => Attendance Object 
     ([present_day] => 4) 

    [5] => Attendance Object 
     ([present_day] => 5) 

) 

Orada düşünüyorum dizi olsaydı böyle tam olarak yapmanızı sağlayacaktır bazı yöntemler olduğunu. Bu bir Collection olduğundan, nasıl yapacağından emin değilim.

Not: Bunu diziye dönüştürmek ve dizi içindeki ekleme işlemini yapmak istemiyorum. Bazı nedenlerle, bu çıktının kesinlikle Collection nesnesinde olmasını istiyorum.

+1

Koleksiyon nesnesinin bir toplama yöntemi vardır, bunu kullanın ve ardından koleksiyonu yeniden sıralayın; '$ collection-> sortBy (function ($ model) {return $ model-> present_day;});' Bu daha sonra koleksiyonu istediğiniz gibi yeniden düzenler. –

+0

Henüz çözüm denemedim. Sadece yorumunuzu okuyarak, çalışmalı eminim. Aslında, benim problemimle uğraşmanın güzel bir yolu. –

+0

@MattBurrow Yaptım. Mükemmel çalıştı! –

cevap

11

Bir koleksiyona bir öğe eklemek için, bu cevaba bakın; Answer

Temel olarak, koleksiyonu böler, öğeyi ilgili dizine ekler.


Sen add yöntemle Eloquent\Collection nesneye öğeyi ekleyebilir

;

$collection->add($item); // Laravel 4 

veya

$collection->push($item); // Laravel 5 

Sonra sortBy yöntemi kullanarak koleksiyonunu yeniden düzenleyebilirsiniz;
$collection = $collection->sortBy(function($model){ return $model->present_day; }); 

Bu

sizin present_day özniteliği tarafından toplanmasını yeniden sıralar. Eğer Illuminate\Database\Eloquent\Collection kullanıyorsanız yukarıdaki kod yalnızca çalışacağını


Not. Düz Eloquent\Support\Collection kullanıyorsanız, add yöntem yoktur.

$collection[] = $item; 

Bu form ayrıca Collection ait Etkili versiyonunda çalışır:

Bunun yerine, ofset boş bir dizi, normal bir dizide yeni bir öğe ekleyerek aynı kullanabilirsiniz.

+1

Buraya gelen herkes için ve bunun artık işe yaramadığını merak ederek [L5 ve üstü], '$ collection-> push ($ item);' öğesini deneyin. – manniL

+1

koleksiyonundaki bir öğeyi ekler "Emin değilim", "indeks" – Andrew

+0

hakkında hiçbir söz olmadığında bu kabul edilen yanıt olduğundan emin değilim. Ayrıca "$ collection-> prepend()' ve "$ olduğunu da belirtmemiz önemlidir koleksiyon-> birleştirme() ', bazen de yararlıdır, çünkü yeni 'Koleksiyon' oluşturmak için sadece 'topla ('). – giovannipds

İlgili konular