2016-07-06 75 views
2

我有兩個表backup_policybackup_settingsbackup_policy有一個名爲backup_settings_id的外鍵字段,映射到backup_settingsid字段。這是執行以創建兩個表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

你的錯誤是,你嘗試分配$這個 - > 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表中獲取數據不起作用。 '$倉庫= $這 - > getDoctrine()> getRepository( '的appbundle:BackupPolicy'); $ settings = $ repository-> findAll();' –

+0

是否因爲getDoctrine()和getRepository()之間的'>'? – Alsatian

+0

BackupPolicy中有多少條記錄? – Alsatian