मैं कॉलम नाम से अपनी तालिका पंक्ति के अंदर एक मान खोजने का प्रयास कर रहा हूं:

$entity = $this->getDoctrine()->getRepository($EntityName)->findOneBy(['uuid' => $uuid]);
$result = $entity->getCat();

कठिनाई यह है कि मैं एक चर के साथ "बिल्ली" को प्रतिस्थापित करने की क्षमता रखना चाहता हूं।

यह दुर्भाग्य से संभव नहीं है:

$myvariable = "Cat";
$result = $entity->'get'.$myvariable.();

तो मैंने एक और दृष्टिकोण बनाया:

$entity = $this->getDoctrine()->getRepository($EntityName)->findBy(array('uuid' => $uuid));
$result = array_search($myvariable, $entity);

लेकिन यहां मुझे एक खाली आउटपुट मिलता है।

एक और दृष्टिकोण:

 foreach ($entity as $key => $value) {
     if($myvariable == $key){
            $result = $value;
     }
  }

यहाँ त्रुटि संदेश है:

एक टेम्पलेट के प्रतिपादन के दौरान एक अपवाद फेंका गया है ("कैच करने योग्य घातक त्रुटि: क्लास ऐप \ Entity \ दस्तावेज़ों का ऑब्जेक्ट स्ट्रिंग में परिवर्तित नहीं किया जा सका")।

मैं जो चाहता हूं उसे हासिल करने का सही तरीका खोजने में मुझे मुश्किलें आती हैं।

0
user10800263 25 सितंबर 2019, 19:36

2 जवाब

सबसे बढ़िया उत्तर

चर फ़ंक्शन का उपयोग करके देखें:

$myvariable = "getCat";
$result = $entity->$myvariable();
0
Manzolo 26 सितंबर 2019, 01:18
मैंने यह किया $myvariable= "get".$name;$getObj = (string) $myvariable; $result = $entity->$getObj();
 – 
user10800263
26 सितंबर 2019, 12:04

आप इसे प्रतिबिंब के साथ करने का प्रयास कर सकते हैं। यहाँ सरल उदाहरण

<?php

class ClassName
{

    private $property1;
    private $property2;

    public function __construct($property1, $property2)
    {
        $this->property1 = $property1;
        $this->property2 = $property2;
    }

    public function getProperty1()
    {
        return $this->property1;
    }

    public function getProperty2()
    {
        return $this->property2;
    }
}


$class = new ClassName('test1', 'test2');

$field = 'property2';

$reflectionClass = new \ReflectionClass($class);

if ($reflectionClass->hasProperty($field)) {
    $property = $reflectionClass->getProperty($field);
    $property->setAccessible(true);
    echo $property->getValue($class);
}

// or

echo $class->{sprintf('get%s', ucfirst($field))}();
0
Ihor Kostrov 25 सितंबर 2019, 20:35
वाह, यह बहुत जटिल है। कोई आसान उपाय नहीं है?
 – 
user10800263
25 सितंबर 2019, 20:13
1
एक सरल उदाहरण के साथ उत्तर अपडेट किया। प्रतिबिंब एक दिलचस्प बात है, आपको इसके बारे में पढ़ना चाहिए।
 – 
Ihor Kostrov
25 सितंबर 2019, 20:36