0

我的课程 Symfony2 有问题。

我在这里有 3 个班级“Niveau、Classe 和 Serie”。一个类与一个级别相关,并且逐个系列级别与一个系列相关,并且与多个类有联系。这是源代码

/**
 * KS\SchoolBundle\Entity\Niveau
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="KS\SchoolBundle\Entity\NiveauRepository")
 */ 
class Niveau
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $niveau
 *
 * @ORM\Column(name="niveau", type="string", length=255)
 */
private $niveau;

/**
 * @var string $code
 * 
 * @ORM\Column(name="code", type="string", length=255)
 */
private $code;

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set niveau
 *
 * @param string $niveau
 * @return Niveau
 */
public function setNiveau($niveau)
{
    $this->niveau = $niveau;

    return $this;
}

/**
 * Get niveau
 *
 * @return string 
 */
public function getNiveau()
{
    return $this->niveau;
}

/**
 * Set code
 *
 * @param string $code
 * @return Niveau
 */
public function setCode($code)
{
    $this->code = $code;

    return $this;
}

/**
 * Get code
 *
 * @return string 
 */
public function getCode()
{
    return $this->code;
}

}

/**
 * KS\SchoolBundle\Entity\Serie
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="KS\SchoolBundle\Entity\SerieRepository")
 */
class Serie
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $serie
 *
 * @ORM\Column(name="serie", type="string", length=255)
 */
private $serie;


/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set name
 *
 * @param string $serie
 * @return Serie
 */
public function setSerie($serie)
{
    $this->serie = $serie;

    return $this;
}

/**
 * Get name
 *
 * @return string 
 */
public function getSerie()
{
    return $this->seriee;
}

}

/**
 * KS\SchoolBundle\Entity\Classe
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="KS\SchoolBundle\Entity\ClasseRepository")
 */
class Classe
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;


/**
 *
 * @var type integer
 * 
 * @ORM\ManyToOne(targetEntity="KS\SchoolBundle\Entity\Niveau")
 * @ORM\JoinColumn(nullable=false)
 */
private $niveau;


/**
 *
 * @var type integer
 * 
 * @ORM\ManyToOne(targetEntity="KS\SchoolBundle\Entity\Serie")
 * @ORM\JoinColumn
 */
private $serie;


/**
 *
 * @var type string
 * 
 * @ORM\ManyToOne(targetEntity="KS\SchoolBundle\Entity\Section", inversedBy="classes")
 * @ORM\JoinColumn(nullable=false)
 */
private $section;




/**
 * Get id
 *
 * @return integer 
 */ 
public function getId()
{
    return $this->id;
}

/**
 * Set niveau
 *
 * @param KS\School\Entity\Niveau $niveau
 * @return Classe
 */
public function setNiveau(\KS\School\Entity\Niveau $niveau)
{
    $this->niveau = $niveau;

    return $this;
}

/**
 * Get niveau
 *
 * @return KS\School\Entity\Niveau 
 */
public function getNiveau()
{
    return $this->niveau;
}

/**
 * Set serie
 *
 * @param KS\School\Entity\Serie $serie
 * @return Classe
 */
public function setSerie(\KS\School\Entity\Serie $serie)
{
    $this->serie = $serie;

    return $this;
}

/**
 * Get serie
 *
 * @return KS\School\Entity\Serie 
 */
public function getSerie()
{
    return $this->serie;
}

/**
 * Set section
 *
 * @param KS\School\Entity\Section $section
 * @return Classe
 */
public function setSection(\KS\School\Entity\Section $section)
{
    $this->section = $section;

    return $this;
}

/**
 * Get section
 *
 * @return KS\School\Entity\Section 
 */
public function getSection()
{
    return $this->section;
}


public function __toString() {
    return $this->getNiveau() . ' ' . $this->getSerie();
}

}

我的问题是字段中的实体我想显示一个下拉列表,该下拉列表的值是代码级别和系列 I 的串联,其过程如下

->add('class', 'entity', array(
                    'class' => 'KSSchoolBundle:Classe',
                    'property' => 'value',
                    'query_builder' => function (\KS\SchoolBundle\Entity\ClasseRepository $er) {
                            $results =  $er->findAllClassesByCodeAndSerie();

                            $data = array();
                            foreach ($results as $result) {
                                $data[] = array(
                                    'id' => $result['id'],
                                    'value' => $result['code'] . ' ' . is_null($result['serie']) ? '' : $result['serie'],
                                );
                            }

                            return $data;
                        },
                )
        )

但从那以后什么都没有。query_builder 返回 $data ,就像您看到的数组一样。id 必须是选项标签 value 的值,而 value 应该是用户必须看到的,但我不知道如何做到这一点。浏览器给出此错误“Doctrine\ORM\QueryBuilder”类型的预期参数,给出“数组”

我想知道这是否是一种在__toString()中正确处理 Class 类的方法,它返回类似getNiveau() 的东西。获取代码()。''。获取系列()。getSerie ()

请一方面,我在这个表格上已经两天了。

4

1 回答 1

1

您在选项数组中为名为“类”的实体字段类型返回一个数组而不是 QueryBuilder 实例。

错误的部分是这个:

'query_builder' => function (\KS\SchoolBundle\Entity\ClasseRepository $er) {

    // this is wrong as it does not return a Query but your Class entities themself ...
    // findByCodeAndSerie would normally receive 2 arguments: $code & $serie
    // but anyway ... this does not belong here !
    $results =  $er->findAllClassesByCodeAndSerie(); 

    // ... weird stuff

    $data = array(); 

        // ... more weird stuff

    return $data;    /// you return an array instead of QueryBuilder

正确的实现是这样的:

use KS\SchoolBundle\Entity\ClasseRepository;

// ...
    // 'property' => 'value',       // remove this !!
    'query_builder' => function(ClasseRepository $er) {
        return $er->createQueryBuilder('c')
            ->orderBy('c.code', 'ASC');
    },      

现在只需将 __toString() 方法添加到您的 Class 实体中。这将是实体的渲染标签:

public function __toString()
{
    return $this->niveau . $this->code . ' ' . $this->serie . $this->serie;
}

阅读实体字段类型参考以获取更多信息和示例。

于 2013-05-23T10:42:28.740 回答