Как я могу искать значение в сущности по имени столбца? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь найти значение в строке таблицы по имени столбца:

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

Сложность в том, что я хочу иметь возможность заменить "Cat" на переменную.

Это, к сожалению, невозможно:

$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;
     }
  }

Сообщение об ошибке здесь:

Возникла исключительная ситуация во время рендеринга шаблона ("Catchable Fatal Error: Объект класса App \ Entity \Документы не могут быть преобразованы в строку ").

Мне просто трудно найти правильный способ добиться того, чего я хочу.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Попробуйте использовать переменную функцию :

$myvariable = "getCat";
$result = $entity->$myvariable();
1 голос
/ 25 сентября 2019

Вы можете попробовать сделать это с отражением.Вот простой пример

<?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))}();
...