String Symfony 5:参数#1($Genre)必须是类型?App\Entity\MusicGenre,给定字符串,在partiturasfix.php中调用
我已经在Symfony 5中安装了orm装置,它与我的实体配合得非常好。但是有一个实体(Partituras=乐谱)与MusicGenre实体(@ORM\manytone(targetEntity=“App\Entity\MusicGenre”,inversedBy=“MusicCore”)有关系 因此,当我尝试运行以下命令时:String Symfony 5:参数#1($Genre)必须是类型?App\Entity\MusicGenre,给定字符串,在partiturasfix.php中调用,string,symfony,object,fixtures,String,Symfony,Object,Fixtures,我已经在Symfony 5中安装了orm装置,它与我的实体配合得非常好。但是有一个实体(Partituras=乐谱)与MusicGenre实体(@ORM\manytone(targetEntity=“App\Entity\MusicGenre”,inversedBy=“MusicCore”)有关系 因此,当我尝试运行以下命令时:/bin/console原则:fixtures:load 终端返回以下错误: App\Entity\MusicGenre::setgreen():参数#1($Genre)
/bin/console原则:fixtures:load
终端返回以下错误:
App\Entity\MusicGenre::setgreen():参数#1($Genre)必须是类型?App\Entity\MusicGenre,给定字符串,在第36行的/Users/webdevelopment/Sites/creativeStage/src/DataFixtures/PartiturasFixtures.php中调用
我的partitionrasfixtures.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();
/**
* @ORM\ManyToOne(targetEntity="App\Entity\MusicGenre", inversedBy="musicscore")
*/
private $Genre;
public function setGenre(?MusicGenre $Genre): self
{
$this->Genre = $Genre;
return $this;
}
我知道,我不必传递字符串,而必须将对象从装置传递到实体,您知道如何修复它吗?使用ORM,您必须根据对象而不是ID来思考
MusicGenre
和Partituras
这里有两个类,它们表示域模型中的对象和参与者。ID只是引用它们的一种方式
在这种情况下,您必须创建一个新的MusicGenre
对象,该对象与多个Partituras
相关,因此您需要一个musicgenrefexture
类来创建和保存一些MusicGenre
对象
您可以在文档()中找到所需的所有信息。
如您所见,您可以在装置之间共享对象,并设置装置依赖项以按顺序加载它们。我决定为我的PartitionTaSixtures重新编写代码,现在它可以正常工作:->setGenre(new App\Entity\MusicGenre())?您试图解决什么问题?如果您的
setgreen
方法需要一个对象或null,则无法传递整数,这是真的。我决定重新编写我的partturasfixes代码并传递一个对象。太好了,非常感谢!!