2016-03-20 3 views
0

Ben sadece şimdi laravel öğreniyorum. Ve bende bu problem var. Denetleyici işlevime 2 istek parametresini geçtim. İlk istek parametresi bir nesne değeri tutar, ancak masaüstümün kaydedileceği alanın bir metin veri türü olduğundan serileştirilmiş bir formata dönüştürdüm. İkinci istek parametresi bir total_total hesaplanan değeri tutar ve bir float veri türü alanına sahiptir. Sorunum, veritabanımda nasıl saklayabilirim? Oluşturma işlevini kullanmaya çalıştım ancak bir hata döndürdü. Bununla ilgili bazı forumlar çok açık değil. Henüz anlayamıyorum. Birisi bana bununla ilgili yardım edebilir mi? İşte kodlarım.Lavaboda birden çok istek parametresi nasıl kaydedilir 5.2?

fonksiyon mağaza

public function store(Request $request){ 

     $serialize_po = serialize($request['purchase_orders']); 
     $overall_total = $request['overall_total']; 
     $purchase_orders_save = PurchaseOrder::create(?); 

} 

nasıl oluşturabilir kullanarak 2 parametreleri saklar? ya da başka bir şekilde kurtardım mı? $request['purchase_orders'] ait

İçinde $request['overall_total'] İçi

enter image description here

aşağıdaki resimde gösterildiği sadece bir sayıdır. Örneğin. 310

Benim Veritabanı Tablo Yapısı böyle

enter image description here

cevap

1

Laravel uygulamasındaki create() işlevi, dizi anahtarlarının sütunların adları olduğu ve dizi değerlerinin sütunlar için karşılık gelen değerler olduğu ilişkisel bir diziyi kabul eder.

Yani mağaza fonksiyonu şöyle görünebilir:

public function store(Request $request){ 
    $serialize_po = serialize($request['purchase_orders']); 
    $overall_total = $request['overall_total']; 
    $purchase_orders_save = PurchaseOrder::create([ 
     'purchase_orders' => $serialize_po, 
     'overall_total' => $overall_total 
    ]); 
} 

Unutulmaması gereken bir başka şey, bir güvenlik önlemi olarak, laravel bir modelin özellikleri dışında bu şekilde doldurulmasına olanak sağlamak olmamasıdır kutu. Bir ilişkisel dizide geçirerek doldurulmasına izin vereceğiniz anahtarlar olan $fillable özelliğini kullanarak modelinizde listelemeniz gerekecektir. Yapmazsanız, muhtemelen bir MassAssignmentException elde edersiniz.

Yani modelinde, büyük olasılıkla aşağıdaki en az olması gerekir: daha fazla seçenek ve bunu yapmak için yolu vardır

class PurchaseOrder extends Model 
{ 
    protected $fillable = ['purchase_orders', 'overall_total']; 
} 

, ama bu temel ve tipik senaryodur. Kitle atama create() yöntemi kullanılarak ve işleme üzerine

diğer bilgiler belgelerinde mevcuttur: https://laravel.com/docs/5.2/eloquent#mass-assignment

1

Something aşağıda gösterilmiştir: Daha keşfetmek istiyorsanız

DB::table('purchaseOrder')->insert(
    ['purchase_orders' => $serialize_po,'overall_total' => $overall_total] 
); 

doc bakınız.

2

bunun yeni bir örneğini oluşturmak için öncelikle ihtiyaç model adınız PurchaseOrder olduğunu düşünürsek. Ardından, kaydetme yöntemini kullanın.

public function store(Request $request) 
{ 
    $purchaseOrder = new PurchaseOrder; 
    $purchaseOrder->overall_total = $request['overall_total']; 
    $purchaseOrder->purchase_orders = serialize($request['purchase_orders']); 
    $purchaseOrder->save(); 
} 

Daha fazla bilgi için bkz. https://laravel.com/docs/5.2/eloquent#basic-inserts.