String Symfony 5:参数#1($Genre)必须是类型?App\Entity\MusicGenre,给定字符串,在partiturasfix.php中调用

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)

我已经在Symfony 5中安装了orm装置,它与我的实体配合得非常好。但是有一个实体(Partituras=乐谱)与MusicGenre实体(@ORM\manytone(targetEntity=“App\Entity\MusicGenre”,inversedBy=“MusicCore”)有关系

因此,当我尝试运行以下命令时:
/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代码并传递一个对象。太好了,非常感谢!!