array
veri türü tüm veritabanı sistemlerinde mevcut değildir ve laravel en Şema Oluşturucu veritabanı agnostik, bunun nedeni olmayan ortak veri türü sütunlar oluşturmak için yöntemler sunmamaktadır. Yani iki seçeneğiniz vardır:
1. Sütunu eklemek için ham bir SQL deyimi kullanın, aşağıdaki gibi bir şey işe yaraması gerektiğini düşünüyorum. Emin değilim rağmen Sorgu Oluşturucu veya Eloquent doğru sütunların bu tür işleyebilir eğer:
DB::statement('ALTER TABLE pickups ADD COLUMN shifts integer[]');
2. Kullanım Eloquent en uygun çözüm attribute casting kullanarak. taşımanıza şöyle json
olarak sütun oluşturun:
public function up()
{
Schema::create('pickups', function (Blueprint $table) {
$table->increment('id');
$table->boolean('default');
$table->json('shifts');
$table->integer('status_id');
$table->timestamps();
});
}
Sonra yapabilirsiniz kurulum senin Pickup
modeli (Daha önce yapmadıysanız) ve $casts
özelliğini kullanın:
class Pickup extends Model
{
protected $casts = [
'shifts' => 'array'
];
}
Bu irade Eloquent'in veriyi veritabanından aldığında, shifts
sütun değerini array
'a dönüştürmesi gerektiğini bilmesine izin verin. Bu, veritabanı seviyesinde olduğu gibi, sütun TEXT
türünde olduğu gibi gerçek bir diziyi taklit eder ve dizi serileştirilir. Ancak sütun değeri sıraya alındığında, Eloquent kodunuzda kullanmanız için gerçek bir tamsayılar dizisi döndürür.
$pickup = App\Pickup::find(1);
dump($pickup->shifts);
dump()
kodundan irade çıkışı gerçek dizi yukarıda: Daha sonra girdiyi aldığınızda id
eşit 1
için yukarıda oluşturulan bir giriş varsayarsak
// Create a new Pickup entry
$pickup = App\Pickup::create([
'default' => true,
'shifts' => '[1, 5, 7]', // you can easily assign an actual integer array here
'status_id' => 1
]);
: Aşağıda bir örnek kullanıldığı durumdur Tamsayılar:
array:3 [▼
0 => 1
1 => 5
2 => 7
]
Teşekkürler @Bogdan sizin greate cevabınız için, ne yazık ki 'shifts' ile yeni alma girişi oluşturmaya çalıştığımda => [1, 5 , 7], '' bu hatayı alıyorum msg 'PHP uyarısı: preg_replace(): Parametre uyuşmazlığı, model bir dizgedir. –
tamam şimdi '' vardiyalar '=>' [1, 5, 7] ', ', teşekkürler :) –
gibi çalışıyorum. Bunu Laravel 5.1'in temiz yüklemesi ile test ettim ve benim için aslında teklif vermeden çalışıyor değeri atarken dizinin etrafında. – Bogdan