Почему я не могу получить entity с репозитория в Doctrine?

Есть сущность
/**
 * @Entity
 * @Table(name="`address`")
 */
class Address
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="IDENTITY")
     */
    protected $address_id;
    /**
     * @Column(type="string")
     */
    protected $firstname;
    /**
     * @ManyToOne(targetEntity="Customer", inversedBy="address")
     * @JoinColumn(name="customer_id", referencedColumnName="customer_id")
     */
    protected $customer;


/**
 * @Entity(repositoryClass="\Core\Repositories\CustomerRepository")
 * @Table(name="`customer`")
 */
class Customer
{
    public function __construct()
    {
        $this->addresses = new ArrayCollection();
    }
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="IDENTITY")
     */
    protected $customer_id;
/**
     * @OneToMany(targetEntity="Address", mappedBy="customer", cascade={"persist", "remove"})
     * @JoinColumn(name="customer_id", referencedColumnName="customer_id")
     */
    protected $addresses;


Проблема в том , что я не могу получить адрес по через репозиторий
$this->entityManager->getRepository(Address::class)->findOneBy(['address_id' => 1]);

Выдает ошибку
Uncaught Doctrine\Common\Proxy\Exception\UnexpectedValueException: Your proxy directory "/tmp" must be writable

Но когда убираю связь
/**
     * @ManyToOne(targetEntity="Customer", inversedBy="address")
     * @JoinColumn(name="customer_id", referencedColumnName="customer_id")
     */
    protected $customer;

то все работает . Значит проблема в связях , но где? подскажите пожалуйста
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
https://www.doctrine-project.org/projects/doctrine...

referencedColumnName: Name of the primary key identifier that is used for joining of this relation.


/**
 * @OneToMany(targetEntity="Address", mappedBy="customer", cascade={"persist", "remove"})
 * @JoinColumn(name="customer_id", referencedColumnName="customer_id")
 */
protected $addresses;


Address::$customer_id - это primary key?

Не заметил, что вы JoinColumn применяете к OneToMany. Оно не применимо, должно быть что-то вроде этого:
/**
 * @Entity
 * @Table(name="`address`")
 */
class Address
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="IDENTITY")
     */
    protected $address_id;
    /**
     * @Column(type="string")
     */
    protected $firstname;
    /**
     * @ManyToOne(targetEntity="Customer", inversedBy="address")
     * @JoinColumn(name="customer_id", referencedColumnName="customer_id")
     */
    protected $customer;
}

/**
 * @Entity(repositoryClass="\Core\Repositories\CustomerRepository")
 * @Table(name="`customer`")
 */
class Customer
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue(strategy="IDENTITY")
     */
    protected $customer_id;
    
    /**
     * @OneToMany(targetEntity="Address", mappedBy="customer", cascade={"persist", "remove"})
     */
    protected $addresses;

    public function __construct()
    {
        $this->addresses = new ArrayCollection();
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы