2017-08-14 12 views
1

私はレポートを管理するためのアプリケーションを設計しています。私はSymfony 3.2.6でこれを開発しています。このpictureに私のデータモデルを見ることができます。私は二つのことをしたい: 1.このレポートのインスタンスを作成し、データベース一般的なデータからSymfonyフォームを生成する

に保存 2.与えられたモジュールの数とレポートの新しいレイアウトを作成します。だから私は、これは、これを行うための方法だと思いますこのデータモデルでは、そうではありませんか?しかし、私は今、symfonyでフォームを作成できますか?

私はそのような何か:

$builder 
     ->add('name', TextType::class) 
    ; 

    foreach ($options['moduleValues'] as $moduleValue) 
    { 
     if($moduleValue instanceof RangeModuleValue) 
     { 
      $builder->add('value', RangeType::class, array(
       'attr' => array(
        'min' => $moduleValue->getRangeModule()->getStartValue(), 
        'max' => $moduleValue->getRangeModule()->getEndValue() 
       ) 
      )); 
     } 
    } 

をしかし、その後、私はエラーを取得する:

Neither the property "value" nor one of the methods "getValue()", "value()", "isValue()", "hasValue()", "__get()" exist and have public access in class "ReportBundle\Entity\Report". 

私はエラーが「値」は、テーブルrange_module_valueであり、明らかだと思います。しかし、これを処理するために私のデザインやフォームをどのように変更する必要がありますか?

注:今後、「TextModule」のような他のモジュールが存在するため、親クラスModuleが存在します。

class Report 
{ 
/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

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

/** 
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\ReportLayout") 
* @ORM\JoinColumn(name="layout_id", referencedColumnName="id") 
*/ 
private $layout; 

/** 
* Report constructor. 
* @param int $id 
*/ 
public function __construct($layout) 
{ 
    $this->layout = $layout; 
} 


/** 
* @return int 
*/ 
public function getLayout() 
{ 
    return $this->layout; 
} 

/** 
* @param int $layout 
*/ 
public function setLayout($layout) 
{ 
    $this->layout = $layout; 
} 

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

/** 
* Set name 
* 
* @param string $name 
* 
* @return Report 
*/ 
public function setName($name) 
{ 
    $this->name = $name; 

    return $this; 
} 

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

}

そして、ここで私は特定のレポートのためのモジュールの値を保持したいクラスRangeModuleValueは、次のとおりです。ここで

は、私のクラスは、報告書です。あなたは多くの$rangeModuleまたは$value追加できるようにするには、この機能を追加し、クラスレポートで

class RangeModuleValue 
{ 
/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\RangeModule") 
* @ORM\JoinColumn(name="rangeModule_id", referencedColumnName="id") 
*/ 
private $rangeModule; 

/** 
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\Report") 
* @ORM\JoinColumn(name="report_id", referencedColumnName="id") 
*/ 
private $report; 

/** 
* @var int 
* 
* @ORM\Column(name="value", type="integer") 
*/ 
private $value; 

/** 
* RangeModuleValue constructor. 
* @param $rangeModule 
* @param $report 
*/ 
public function __construct($report, $rangeModule) 
{ 
    $this->report = $report; 
    $this->rangeModule = $rangeModule; 
} 


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

/** 
* Set rangeModule 
* 
* @param string $rangeModule 
* 
* @return RangeModuleValue 
*/ 
public function setRangeModule($rangeModule) 
{ 
    $this->rangeModule = $rangeModule; 

    return $this; 
} 

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

/** 
* Set report 
* 
* @param string $report 
* 
* @return RangeModuleValue 
*/ 
public function setReport($report) 
{ 
    $this->report = $report; 

    return $this; 
} 

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

/** 
* Set value 
* 
* @param integer $value 
* 
* @return RangeModuleValue 
*/ 
public function setValue($value) 
{ 
    $this->value = $value; 

    return $this; 
} 

/** 
* Get value 
* 
* @return int 
*/ 
public function getValue() 
{ 
    return $this->value; 
} 

}

+0

私はあなたのエンティティに()関数addValueを追加する必要があると思います:

は、より多くの情報については、これはドキュメントです。投稿にエンティティ(クラス)を追加できますか? –

+1

こんにちはMelik、あなたの編集のおかげで。レポートクラスとrangeModuleValueクラスを追加しました(そこに値を保持したい)。データベース設計を編集する必要がありますか?それともこのデザインで可能ですか? –

答えて

0

:コントローラで

public function setranges(ArrayCollection $ranges) 
    { 
     $this->ranges= $ranges; 
    } 

public function addrangemodule (RangeModuleValue $rangeModule) 
    { 
     $day->setIdReport($this); 
     $this->ranges->add($day); 
    } 

しかしがArrayCollectionのあるべき範囲でした必要なだけ追加します: $ range = new RangeModuleValue();

$report->addrangemodule ($range); 

このコードは、私が彼が働いているかどうかわかりません。

https://symfony.com/doc/current/form/form_collections.html

http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html

+0

ありがとうございますが、私はより多くの異なるモジュールタイプを持っています。報告する親クラスModuleValueと1:nリレーションシップを生成する必要がありますか? –

+0

アソシエーションを使用しないアソシエーションマッピングを使用する必要があると思います。これを見てみましょう:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html –

関連する問題