2014-08-28 7 views
13

मेरी कोडिंग शैली पर सुसंगत होने के लिए, मैं snake_case के बजाय विशेषताओं तक पहुंचने के लिए camelCase का उपयोग करना चाहता हूं। क्या मूल ढांचे को संशोधित किए बिना लार्वेल में यह संभव है? यदि हां, तो कैसे?ऊंट मामले का उपयोग करके मैं गुणों का उपयोग कैसे कर सकता हूं?

उदाहरण:

// Database column: first_name 

echo $user->first_name; // Default Laravel behavior 
echo $user->firstName; // Wanted behavior 

उत्तर

15

अपनी खुद की BaseModel वर्ग बनाएँ और निम्न विधियों को ओवरराइड। सुनिश्चित करें कि आपके सभी अन्य मॉडल extend आपके BaseModel हैं।

class BaseModel extends Eloquent { 

    // Allow for camelCased attribute access 

    public function getAttribute($key) 
    { 
     return parent::getAttribute(snake_case($key)); 
    } 

    public function setAttribute($key, $value) 
    { 
     return parent::setAttribute(snake_case($key), $value); 
    } 

} 
तो उपयोग के लिए

:

// Database column: first_name 

echo $user->first_name; // Still works 
echo $user->firstName; // Works too! 

इस चाल के आसपास Model में इस्तेमाल किया जादू विधि अधिभावी द्वारा साँप मामले की कुंजी के लिए मजबूर कर घूमती है।

+2

im यकीन है कि आप http://laravelsnippets.com/ देखा है –

+4

तुम भी __isset() और __unset() पद्धतियों का विस्तार करने की है। अन्यथा जारी(), खाली() और अनसेट() फ़ंक्शंस ऊंट केस कुंजी के साथ ठीक से काम नहीं करेंगे। मैंने इस बग पर आधा दिन बिताया। – jaaksarv

+0

नरक ब्रो धन्यवाद की तरह यह खोज रहे हैं! : डी –

10

चूंकि SO टिप्पणियों में कोड स्निपेट चिपकाने की अनुमति नहीं देता है, इसलिए मैं इसे एक नए उत्तर के रूप में पोस्ट कर रहा हूं।

यह सुनिश्चित करने के लिए कि उत्सुक लोडिंग टूट न जाए, मुझे @ लाज़लो के उत्तर को संशोधित करना पड़ा। एक अलग कुंजी द्वारा उत्सुकता से लोड किए गए संबंधों तक पहुंचने पर, उन्हें पुनः लोड किया जाता है।

<?php 

class BaseModel extends Eloquent 
{ 

    public function getAttribute($key) 
    { 
     if (array_key_exists($key, $this->relations)) { 
      return parent::getAttribute($key); 
     } else { 
      return parent::getAttribute(snake_case($key)); 
     } 
    } 

    public function setAttribute($key, $value) 
    { 
     return parent::setAttribute(snake_case($key), $value); 
    } 
} 
+0

क्या आप इस मुद्दे को हल कर सकते हैं जिसे आपने हल किया है? मैं वास्तव में उस सत्यापन का पालन नहीं कर रहा हूं जो आप संबंध सरणी पर करते हैं? –

+2

मान लें कि आप क्वेरी ''उपयोगकर्ता :: के साथ' 'likedPosts') '' चलाते हैं, इसे '' $ user-> विशेषताओं [' likedPosts '] '' के रूप में संग्रहीत किया जाएगा। हालांकि, जब आप 'getAttribute'' को ओवरराइड करते हैं और सबकुछ snake_case में बदलते हैं, तो यह '' $ user-> विशेषताएँ ['liked_posts'] '' '' user-> likedPosts'' लिखते समय '' user user-> विशेषताओं ['liked_posts'] '' तक पहुंचने का प्रयास करेगा। अस्तित्व में नहीं है फिर लार्वेल संबंधों को आलसी लोड करेगा, भले ही रिश्ते पहले ही लोड हो गया हो (जैसा कि पसंद किया गया था)। इसे रोकने के लिए, 'if'' कथन आवश्यक है। –

+0

ओह, मुझे अब मिल गया है ... आपकी मदद के लिए बहुत बहुत धन्यवाद! ;) –

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

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