2015-11-11 9 views
6

के साथ लार्वेल में मॉडल रिश्तों के माध्यम से कैसे जा सकता हूं, मैं जटिल समृद्ध मॉडल संबंधों/विशेषताओं के माध्यम से पार करने की कोशिश कर रहा हूं, और मैं इसके माध्यम से पुन: प्रयास करने के लिए एक साधारण डॉट संरचना का उपयोग करना चाहता हूं, जैसा कि आप कैसे कर सकते हैंमैं डॉट सिंटैक्स

$data = [ 
    'foo' => [ 
    'bar' => [ 
     'key' => 'value' 
    ] 
    ] 
]; 
$value = Arr::get($data, 'foo.bar.key'); // returns 'value' 

मैं

$value = Arr::get($model, 'relation.subrelation.attribute') 

का उपयोग कर हालांकि इस विफल रहता है और aways अशक्त देता है, यहां तक ​​कि यद्यपि की कोशिश की है: के साथ Arr::get()

उदाहरण पार सरणियों ugh elocquent मॉडल ArrayAccess का समर्थन करते हैं।

क्या लार्वेल को इसे पूरा करने का एक आसान तरीका है?

+0

क्योंकि संबंधों कई लोगों के लिए एक हो सकता है, वहाँ सकता है संख्यात्मक सूचकांक के साथ वस्तुओं की एक सरणी हो। जांचें कि क्या यह मुद्दा है। – anwerj

+0

@anwerjunaid ये पूरी तरह से एक-से-एक संबंध (बच्चे/अभिभावक) हैं, लेकिन सुझाव –

+0

के लिए धन्यवाद क्या आप मॉडल क्वेरी से संग्रह को Array में बदल रहे हैं? आपको पहले संग्रह पर '-> toArray()' का उपयोग करना चाहिए। – Mithredate

उत्तर

3

सोच आगमन :: पुल को संशोधित करके मैं एक समाधान यह पता लगाने में कामयाब रहे हैं, सब कुछ उन लोगों के लिए() फ़ंक्शन विशेष रूप से मॉडल के साथ काम करने के लिए:

public static function traverse($model, $key, $default = null) 
{ 
    if (is_array($model)) { 
     return Arr::get($model, $key, $default); 
    } 


    if (is_null($key)) { 
     return $model; 
    } 

    if (isset($model[$key])) { 
     return $model[$key]; 
    } 

    foreach (explode('.', $key) as $segment) { 
     try { 
      $model = $model->$segment; 
     } catch (\Exception $e) { 
      return value($default); 
     } 
    } 

    return $model; 
} 
-1

बोलने वाले मॉडल Collection लौटाते हैं जो PHP में ऐरे जैसा नहीं है। आप toArray() समारोह

$my_model->toArray(); 

यह तो आप किसी सरणी देता है का उपयोग कर सरणी करने के लिए इसे बदल सकते हैं। लेकिन याद रखें कि यह मुख्य मॉडल के अंदर सभी नेस्टेड मॉडल को एक सरणी में भी परिवर्तित करता है।

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