@IvanN777

Работаю с доктриной связь 1 к 1 выбираю связанную сущность но она почемуто пустая?

ProductModel
Asu\Models\ProductModel:
  type: entity
  table: product
  id:
    id:
      type: integer
      length: 10
      column: product_id
      generator:
        strategy: AUTO
  fields:
    priceId:
        type: integer
        length: 10
        column: price_id
  oneToOne:
    price:
      targetEntity: Asu\Models\PriceModel
      joinColumn:
        name: price_id
        referencedColumnName: price_id


PriceModel
Asu\Models\PriceModel:
  type: entity
  table: price 
  id:
    id:
      type: integer
      length: 10
      column: price_id
      generator:
        strategy: AUTO


Код PHP
имею protectd price; свойство и прописал для него геттер и сеттер.
public function setPrice($price)
    {
        $this->price = $price;
        return $this;
    } 
    public function addPrice($price)
    {
        $this->setPrice($price);
    }
    public function getPrice()
    {
        return $this->price;
    }


Если сущьности использовать без связей, то они работают но по связи не выдается результат, null.
$product = $productRepo->findOneBy(['code' => 'АН', 'number' => '101', 
            'color' => 'БД']);
        $price = $product->getPrice();

Код не падает, продукт находит, но когда я пробую вывести price, то выдает просту Null. Хотя запись в базе есть.
Как получить связанную запись по oneToOne
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 2
voronkovich
@voronkovich
Вот этот кусок лишний:

fields:
    priceId:
        type: integer
        length: 10
        column: price_id


Доктрина сама создаст все необходимые поля для связи.
Ответ написан
Комментировать
@IvanN777 Автор вопроса
Проблема оказалась что я юзал __call() оно как раз на связях и сломалось.
Хотя нормально выдавала значения при обычной выборке.

public function __call($namefunction, $arguments)
    {
        if (strlen($nameFunction) < 4):
            return;
        endif;
        $prefix = substr($nameFunction, 0, 3);
        $name = lcfirst(substr($nameFunction, 3, strlen($nameFunction) - 3));
        $inFields =  array_search($name, self::$fields);
        if ($prefix == 'get'):
            if ($inFields):
                return $this->$name;
            endif;
        endif;
        if ($prefix == 'set'):
            if ($inFields):
                $value = $arguments[0];
                $this->$name = $value;
            endif;
        endif;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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