2016-11-21 7 views
7

मैं अपनी आईडी का उपयोग कर posts डेटाबेस तालिका से रिकॉर्ड प्राप्त करने का प्रयास कर रहा हूं। मैं कुछ समय के लिए खोज() विधि पर अपने सिर को टक्कर लगी हूं, यह उलझन में है कि यह क्यों काम नहीं कर रहा था।एलोक्वेंट: ढूंढें() और कहां() उपयोग लार्वेल

$post = Post::find($id); 
$post->delete(); 

अनिच्छा से मैं ऐसा किया: यहाँ मेरी क्वेरी है कि मेरे पास सही दिखता है, लेकिन काम नहीं किया है

$post = Post::where('id', $id); 
$post->delete(); 

और आश्चर्यजनक रूप से पर्याप्त है, यह काम किया, लेकिन मैं पता नहीं कैसे कर सकते है।

मुझे यह भी पता है कि find() के विपरीत, where() एक प्रश्न बिल्डर है और इसलिए मैं भी इस तरह इसका इस्तेमाल कर सकते हैं: Post::where('id', $id)->first()

रास्ता तरीके काम में अंतर के बारे में कोई भी विचार?

उत्तर

7

आपका कोड ठीक लग रहा है, लेकिन चीजों की एक जोड़ी के बारे में पता होना करने के लिए देखते हैं: प्राथमिक कुंजी पर

Post::find($id); में कार्य करता है अगर आप ऐसा करके id के अलावा कुछ करने के लिए अपने मॉडल में अपने प्राथमिक कुंजी निर्धारित किया है,:

protected $primaryKey = 'slug'; 

तो find इसके बजाय उस कुंजी से खोज करेगा।

Laravel भी उम्मीद id, एक पूर्णांक होना करने के लिए आप अन्य कुछ प्रयोग कर रहे हैं अगर एक पूर्णांक से (जैसे एक स्ट्रिंग के रूप में) आप गलत पर अपने मॉडल पर incrementing संपत्ति निर्धारित करने की आवश्यकता:

public $incrementing = false; 
3

करने के लिए ऊपर craig_h की टिप्पणी में जोड़ें (मेरे पास वर्तमान में इसके उत्तर में एक टिप्पणी के रूप में जोड़ने के लिए पर्याप्त प्रतिनिधि नहीं है, क्षमा करें), यदि आपकी प्राथमिक कुंजी पूर्णांक नहीं है, तो आप अपने मॉडल को यह भी बताना चाहेंगे कि यह किस प्रकार का डेटा प्रकार है , मॉडल परिभाषा के शीर्ष पर कीटाइप सेट करके।

public $keyType = 'string' 

सुवक्ता castAttribute() समारोह में परिभाषित प्रकार, जो Laravel 5.4 के रूप में कर रहे हैं में से किसी को समझता है: int, नाव, स्ट्रिंग, bool, वस्तु, सरणी, संग्रह, तारीख और टाइमस्टैम्प।

यह सुनिश्चित करेगा कि आपकी प्राथमिक कुंजी सही समकक्ष PHP डेटा प्रकार में डाली जाए।

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