【发布时间】:2021-03-06 07:29:42
【问题描述】:
我已经在 Symfony 5 中安装了 orm-fixtures,它对我的实体非常有效。但是一个实体(Partituras = 乐谱)与 MusicGenre 实体(@ORM\ManyToOne(targetEntity="App\Entity\MusicGenre", inversedBy="musicscore")有关系。
所以当我尝试运行以下命令时:./bin/console doctrine:fixtures:load
终端返回以下错误:
App\Entity\MusicGenre::setGenre(): 参数 #1 ($Genre) 必须是 ?App\Entity\MusicGenre 类型,给定字符串,在 /Users/webdevelopment/Sites/creativeStage/src/DataFixtures/ 中调用PartiturasFixtures.php 第 36 行
我的 PartiturasFixtures.php 文件中的代码如下所示:
<?php
namespace App\DataFixtures;
use App\Entity\Partituras;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class PartiturasFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
// DEFINE AN ARRAY AND INSERT INTO THE DATABASE ALL MUSIC SCORES
$partituras = array(
array('id' => '1',
'genre_id' => '10',
'cancion' => 'Nova Flor',
'compositor' => 'Mario Zán e Palmeira',
'tonalidad' => 'MI mayor | FA mayor',
'disponibilidad_guitarra' => 'disponible',
'disponibilidad_arpa' => 'disponible',
'country_code' => 'BR')
);
// END ARRAY
// CREATE A FOREACH LOOP
foreach ($partituras as $element):
$partituraNew = new Partituras();
$genre_id = $element['genre_id'];
$cancion = $element['cancion'];
$compositor = $element['compositor'];
$tonalidad = $element['tonalidad'];
$disponibilidad_guitarra = $element['disponibilidad_guitarra'];
$disponibilidad_arpa = $element['disponibilidad_arpa'];
$country_code = $element['country_code'];
$partituraNew->setCancion($cancion)
->setGenre($genre_id)
->setCompositor($compositor)
->setTonalidad($tonalidad)
->setDisponibilidadGuitarra($disponibilidad_guitarra)
->setDisponibilidadArpa($disponibilidad_arpa)
->setCountryCode($country_code)
// PREPARE DATA FOR THE DATABASE
$manager->persist($partituraNew);
endforeach;
// INSERT DATA INTO THE DATABASE
$manager->flush();
在“Partituras”实体中,setGenre 方法如下所示:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\MusicGenre", inversedBy="musicscore")
*/
private $Genre;
public function setGenre(?MusicGenre $Genre): self
{
$this->Genre = $Genre;
return $this;
}
我知道我必须将 object 从 Fixtures 传递给实体,而不是传递 string,您知道如何解决它吗? p>
【问题讨论】:
-
->setGenre(new App\Entity\MusicGenre()); ?
-
您尝试过什么来解决问题?如果您的
setGenre方法需要一个对象或 null,则不能传递整数 -
是的,没错,我决定重写我的 PartiturasFixtures 代码并传递一个对象。
标签: string symfony object fixtures