Доктрина: как установить нулевое значение вместо сущности - PullRequest
1 голос
/ 09 октября 2019

У меня проблема с моей сущностью Doctrine.

В моем модуле у меня есть история, чтобы перечислить действия, выполняемые пользователями.

Во время этого процесса я использую отношение ManyToOne моегоСущность по отношению к себе.

Когда я обновляю элемент в моей базе данных, я использую "setGain ()", чтобы передать этот результат другому, но если я хочу отменить действие от пользователя, мне нужно установить как нульзначение setGain (), но Doctrine не принимает его и возвращает:

PHP Catchable fatal error: Argument 1 passed to Paris\Entity\Historique::setGain() must be an instance of Paris\Entity\Historique, null given

Моя сущность:

<?php

namespace Paris\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Historique
 *
 * @ORM\Table(name="paris__historique")
 * @ORM\Entity
 */
class Historique {
    /**
     * @var integer
     *
     * @ORM\Column(name="id_historique", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id_historique;

    /**
     * @var integer
     *
     * @ORM\Column(name="id_jol", type="integer", length=11, precision=0, scale=0, nullable=true, unique=false)
     */
    private $id_jol;

    /**
     * @var string
     *
     * @ORM\Column(name="action", type="string", length=50, precision=0, scale=0, nullable=false, unique=false)
     */
    private $action;

    /**
     * @var string
     *
     * @ORM\Column(name="detail", type="text", precision=0, scale=0, nullable=true, unique=false)
     */
    private $detail;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Historique")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_gain", referencedColumnName="id_historique", nullable=true)
     * })
     */
    private $id_gain;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Parieur")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_participant", referencedColumnName="id_participant", nullable=true)
     * })
     */
    private $id_participant;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Concours")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_concours", referencedColumnName="id_concours", nullable=true)
     * })
     */
    private $id_concours;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Periode")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_periode", referencedColumnName="id_periode", nullable=true)
     * })
     */
    private $id_periode;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Paris")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_paris", referencedColumnName="id_paris", nullable=true)
     * })
     */
    private $id_paris;

     /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="\Paris\Entity\Mise")
      * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_mise", referencedColumnName="id_mise", nullable=true)
     * })
     */
    private $id_mise;

    /**
     * @var integer
     *
     * @ORM\Column(name="date_historique", type="integer", length=11, precision=0, scale=0, nullable=false, unique=false)
     */
    private $date_historique;


    public function getIdHistorique() {
        return $this->id_historique;
    }

    public function setIdJol($idJol) {
        $this->id_jol = $idJol;

        return $this;
    }

    public function getIdJol() {
        return $this->id_jol;
    }

    public function setAction($action) {
        $this->action = $action;

        return $this;
    }

    public function getAction() {
        return $this->action;
    }

    public function getGain() {
        return $this->id_gain;
    }

    public function setGain(\Paris\Entity\Historique $id_gain) {
        $this->id_gain = $id_gain;
        return $this;
    }

    public function setDetail($detail) {
        $this->detail = $detail;

        return $this;
    }

    public function getDetail() {
        return $this->detail;
    }

    public function setParieur(\Paris\Entity\Parieur $id_participant) {
        $this->id_participant = $id_participant;
        return $this;
    }

    public function getParieur() {
        return $this->id_participant;
    }

    public function setConcours(\Paris\Entity\Concours $id_concours) {
        $this->id_concours = $id_concours;
        return $this;
    }

    public function getConcours() {
        return $this->id_concours;
    }

    public function setPeriode(\Paris\Entity\Periode $id_periode) {
        $this->id_periode = $id_periode;
        return $this;
    }

    public function getPeriode() {
        return $this->id_periode;
    }

    public function setPari(\Paris\Entity\Paris $id_paris) {
        $this->id_paris = $id_paris;
        return $this;
    }

    public function getPari() {
        return $this->id_paris;
    }

    public function setmise(\Paris\Entity\Mise $id_mise) {
        $this->id_mise = $id_mise;
        return $this;
    }

    public function getMise() {
        return $this->id_mise;
    }

    public function setDate($dateHistorique) {
        $this->date_historique = $dateHistorique;

        return $this;
    }

    public function getDate() {
        return $this->date_historique;
    }
}

В моей базе данных для соответствующего поля правильно установлено значение Nullпо умолчанию и Nullable.

Можете ли вы помочь мне? ^^

Заранее благодарю за ответ.

1 Ответ

0 голосов
/ 09 октября 2019

Определить setGain как:

public function setGain(?\Paris\Entity\Historique $id_gain) {
    $this->id_gain = $id_gain;
    return $this;
}

? перед типом typehint позволяет передать null в качестве аргумента.

Другой вариант:

public function setGain(\Paris\Entity\Historique $id_gain = null) {
    $this->id_gain = $id_gain;
    return $this;
}
...