доктрина symfony проблема индекса один-два-много - PullRequest
0 голосов
/ 12 ноября 2018

Имея парадигму: - станции могут иметь 0 ..N прогнозные модели. - каждая прогнозная модель может иметь 0..N связанных станций.

Это означает, что станции и прогнозы таблицы связаны между собой промежуточной таблицей с именем station_forecast .

Следующий код не выдает ошибку, когда файл ветки пытается прочитать коллекцию прогнозов с объекта станции:

Исключение было сгенерировано во время рендеринга шаблона

Примечание: неопределенный индекс: станция в /vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php строка 1280

Station :

/** 
 * @ORM\OneToMany(targetEntity="ForecastBundle\Entity\StationForecast", mappedBy="***station***")   <-- THIS 'STATION' THE ERROR REFERS.
 */
protected $forecasts`;

public function __construct()
{
    $this->forecasts = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * @return Doctrine\Common\Collections\Collection 
 */
function getForecasts() {
    return $this->forecasts;
}

/**
 * @param \ForecastBundle\Entity\StationForecast $station_forecast
 */
public function addForecasts(StationForecast $station_forecast)
{
    $this->forecasts[] = $station_forecast;
}

StationForecast

/**
 * @ORM\Id
 * @ORM\Column(name="station_id", type="integer", nullable=false)  
 * @ORM\ManyToOne(targetEntity="EstacionsBundle\Entity\Station", inversedBy="forecasts")
 */
protected $station;

/**
 * @ORM\Id
 * @ORM\Column(name="forecast_id", type="integer", nullable=false)  
 * @ORM\ManyToOne(targetEntity="ForecastBundle\Entity\Forecast", inversedBy="stations")
 */
protected $forecast;

Прогноз

/**
 * @ORM\OneToMany(targetEntity="ForecastBundle\Entity\StationForecast", mappedBy="forecast")
 */
protected $stations;

public function addEstacions(\ForecastBundle\Entity\StationForecast $stations)
{
    $this->stations[] = $stations;
}

/**
 * @return Doctrine\Common\Collections\Collection 
 */
public function getStations()
{
    return $this->stations;
}

public function addStationForecast(\ForecastBundle\Entity\StationForecast $stations)
{
    $this->stations[] = $stations;
}

Вы знаете, что может случиться? Я схожу с ума ...

1 Ответ

0 голосов
/ 12 ноября 2018

Вам вообще не нужен класс StationForcast !Просто сохраните Station & Forcast , и доктрина все равно будет создавать и управлять объединенной таблицей (station_forcast) для вас.

Station

class Station
{
    /** 
     * @ORM\ManyToMany(targetEntity="Forcast", mappedBy="stations")
     */
    protected $forecasts;

    public function __construct()
    {
        $this->forecasts = new ArrayCollection();
    }

    /**
     * @return Collection 
     */
    function getForecasts() {
        return $this->forecasts;
    }

    /**
     * @param Forecast $forecast
     */
    public function addForecast(Forecast $forecast)
    {
        if (!$this->forcasts->contains($forcast)
        {
            $this->forecasts->add($forecast);
            $forcast->addStation($this);
        }
    }
}

Прогноз

class Forcast
{
    /**
     * @ORM\ManyToMany(targetEntity="Station", inversedBy="forecasts")
     */
    protected $stations;

    public function __construct()
    {
        $this->stations = new ArrayCollection();
    }

    /**
     * @return Collection 
     */
    public function getStations()
    {
        return $this->stations;
    }

    /**
     * @param Station $station
     */
    public function addStation(Station $station)
    {
        if (!$this->stations->contains($station)
        {
            $this->stations->add($station);
            $station->addForcast($this);
        }
    }
}
...