2012-12-03 11 views
12

के साथ रिकॉर्ड अपडेट करना मुझे लैरवेल में POST के माध्यम से मूल रिकॉर्ड अपडेट करने में समस्या हो रही है।लार्वा अद्यतन सिंटैक्स - ऐरे

मैंने एक सरणी में सभी पोस्ट डेटा पर कब्जा कर लिया है, और यदि मौजूदा ऑर्डर # 0 है, तो मैं एक नया रिकॉर्ड (ठीक काम करता है) बना देता हूं। अन्यथा मैं मौजूदा रिकॉर्ड अद्यतन करता हूं।

Order.php

class Order extends Eloquent { 
    public static $table = 'my_orders'; 
} 

routes.php

//Handle a new order POST 
Route::post('order', array('do' => function() { 
    $thisOrder = array(
     'qty' => Input::get('quantity'), 
     'desc' => Input::get('description'), 
    ); 

    $thisOrderID = Input::get('orderNo'); 

    //CHECK FOR NEW OR EXISTING ORDER 
    if($thisOrderID > 0) { 
     //THIS FUNCTION SOMEHOW RETURNS THE FUNCTION CALL AND DOESNT CONTINUE PAST 
     //AND THE RECORD IS NOT UPDATED 
     $updateOrder = Order::update($thisOrderID, $thisOrder); 
    } 
} 

अद्यतन: कोड ऊपर तथ्य काम में करता है। मेरे पास एक सत्यापन त्रुटि थी, जो फ़ंक्शन को जल्दी लौटने का कारण बना रहा था।

उत्तर

17
इस लाइन के बजाय

:

$updateOrder = Order::update($thisOrderID, $thisOrder); 

आप क्या करने की जरूरत:

$updateOrder = Order::find($thisOrderID)->update($thisOrder); 
खोजने के साथ

() (जो where_id के बराबर होती है()) आप डेटाबेस से एक विशिष्ट पंक्ति का चयन करते हैं और अपडेट के साथ आप नया डेटा पास करते हैं।

+0

यदि यह वही काम करता है जो मैं ढूंढ रहा हूं। क्या यह लैरावेल दस्तावेज़ों में कहीं भी दस्तावेज है? मैंने उन्हें बहुत अच्छी तरह से देखा। क्या यह एक बुलियन लौटाएगा? – jamis0n

+0

एक वाष्पशील मॉडल को इसके गुणों से समायोजित किया जा सकता है। लेकिन फ्लुएंट नामक लैरावेल के मूल डेटाबेस मॉडल का उपयोग करके भी। यह यहां दस्तावेज़ों में शामिल है: http://laravel.com/docs/database/fluent#update – markvaneijk

+0

'$ अपडेटऑर्डर = ऑर्डर :: अपडेट ($ thisOrderID, $ thisOrder) बदलता है; 'ठीक काम करता है। मुझे अपने सत्यापन में एक त्रुटि हुई, यही कारण है कि मुझे अप्रत्याशित रिटर्न परिणाम मिल रहे थे। – jamis0n

3

आप इस बारे में क्या सोचते हैं:

//Handle a new order POST 
Route::post('order', array('do' => function() { 
    $thisOrder = array(
     'qty' => Input::get('quantity'), 
     'desc' => Input::get('description'), 
    ); 

    $thisOrderID = Input::get('orderNo'); 

    $order = Order::find($thisOrderID); 

    //CHECK FOR NEW OR EXISTING ORDER 
    if($order) { 
     $order->title = 'New order title'; 
     $order->desc = 'New description'; 
     $order->save(); 
    } 
} 
+0

यह अच्छा काम करता है जब तक आप अद्यतन करने के लिए कई क्षेत्रों, जो तब बनाता है यह कठिन और निरर्थक लग रहे हैं के रूप में वे पहले से ही परिभाषित किया गया है सरणी में मुझे उम्मीद है कि @ मार्कवनएज के पास सही जवाब है। – jamis0n

1

erm, मैं इस तरह से ऐसा करने का सुझाव दूंगा, अगर $ इस ऑर्डर में कुंजी शामिल है, तो यह सिर्फ रिकॉर्ड अपडेट करेगा, अन्यथा यह सिर्फ एक नया रिकॉर्ड बनाएगा।

$thisOrder = array(
    'orderNo' => Input::get('orderNo'), 
    'qty' => Input::get('quantity'), 
    'desc' => Input::get('description'), 
); 

$updateOrder = Order::save($thisOrder); 

यदि इनपुट :: प्राप्त ('orderNo') कोई मूल्य नहीं किसी और अद्यतन बनाने की जाएगी

संबंधित मुद्दे