2016-07-06 18 views
2

私は2つのテーブルbackup_policybackup_settingsを持っています。 backup_policyにはbackup_settings_idという外部キーフィールドがあり、backup_settingsidフィールドにマップされています。私はこのコードをしようとすると、この2つのテーブルsymfony3の外部キー関係エンティティは動作しません

ALTER TABLE `backup_policy_scheduler` 
ADD FOREIGN KEY (`backup_policy_id`) REFERENCES `backup_policy` (`id`) 

との関係を作成するために実行されたクエリは、今の問題は、画面が負荷に維持し、私の最大の実行エラーを与えていますさ。

$repository=$this->getDoctrine()>getRepository('AppBundle:BackupPolicy'); 
$settings = $repository->findAll(); 

私はSQL文を準備し、fetchAll()を実行すると結果がフェッチされます。

私はレコードを挿入しようとすると、それは私に次のエラーを与える:

Type error: Argument 1 passed to AppBundle\Entity\BackupPolicy::setBackupSettings() must be an instance of AppBundle\Entity\BackupSettings, string given, called in /var/www/symfonyproject/src/AppBundle/Controller/BackupPolicyController.php on line 46

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* BackupPolicy 
* 
* @ORM\Table(name="backup_policy") 
    *@ORM\Entity(repositoryClass="AppBundle\Entity\Repository\BackupPolicyRepository") 
*/ 
class BackupPolicy 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

/** 
* @var \BackupSettings 
* 
* @ORM\ManyToOne(targetEntity="BackupSettings") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="backup_settings_id", referencedColumnName="id") 
* }) 
*/ 
private $backupSettings; 


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

/** 
* Set backupSettings 
* 
* @param \AppBundle\Entity\BackupSettings $backupSettings 
* 
* @return BackupPolicy 
*/ 
public function setBackupSettings(\AppBundle\Entity\BackupSettings $backupSettings = null) 
{ 
    $this->backupSettings = $backupSettings; 

    return $this; 
} 

/** 
* Get backupSettings 
* 
* @return \AppBundle\Entity\BackupSettings 
*/ 
public function getBackupSettings() 
{ 
    return $this->backupSettings; 
} 
} 
+0

あなたのエラーは、あなたが文字列での$ this - > backupSettingsを割り当てようということです。あなたのコントローラライン46に。これは、foreignnキーまたはマッピングには関係しません。 コントローラを表示します。 – Alsatian

+0

はい、そうです。私は文字列だけを挿入しています。私はbackup_settingsテーブルに挿入するときにこれを取得しています。しかし、なぜfindAll()もうまくいけませんか? –

+0

コントローラを表示してください。 – Alsatian

答えて

2

あなただけBackupSettingsエンティティを挿入することができます。お使いのコントローラライン46

ないで

$backupPolicy->setBackupSettings('setting1'); 

しかし、何かのように:

$repo=$this->getDoctrine()>getRepository('AppBundle:BackupSetting'); 
$backupPolicy->setBackupSettings($repo->findOneBy(array('name'=>'setting1')); 
+0

その作業! backup_policyテーブルにデータを挿入することができました。しかし、backup_policyテーブルからデータを取得することはできません。 $ repository = $ this-> getDoctrine()> getRepository( 'AppBundle:BackupPolicy'); $ settings = $ repository-> findAll(); ' –

+0

getDoctrine()とgetRepository()の間に '>'がありますか? – Alsatian

+0

BackupPolicyにはいくつのレコードがありますか? – Alsatian

関連する問題