Как я могу оставить корешок таблицы / сущности с доктриной (Symfony)? - PullRequest
0 голосов
/ 06 декабря 2018

в mySQL это моя таблица pages:

id  unique_id    name      template     icon    slug
1   jc62368231   Felder                  2     fields

и моя таблица icons:

id  name
1   adjust
2   anchor

В моем Controller.php я получаю содержимое из Pages с помощью доктрины:

$pages = $this->getDoctrine()->getRepository(Pages::class)->findAll();

Вот мой вывод:

   array:1 [▼
      0 => Pages {#4930 ▼
        -id: 5
        -unique_id: "jc62368231"
        -name: "Felder"
        -template: ""
        -icon: "2"
        -slug: "fields"
      }
    ]

Я хочу присоединить таблицу icons к таблице pages.Чтобы достичь этого результата:

      array:1 [▼
      0 => Pages {#4930 ▼
        -id: 5
        -unique_id: "jc62368231"
        -name: "Felder"
        -template: ""
        -icon: "anchor"
        -slug: "fields"
      }
    ]

Это мой подход:

$pages = $this->getDoctrine()->getRepository(Pages::class)->join();

 /**
  * @return Pages[]
  */

  public function join('icons')
  {
    ->leftJoin('icons.id', 'icon')
    ->getQuery()
    ->getResult()
    ;
  }

Но я получаю эту ошибку:

[Семантическая ошибка] строка 0,столбец 60 рядом со значком: ошибка: приложение класса \ Entity \ Pages не имеет ассоциации с именем id

1 Ответ

0 голосов
/ 06 декабря 2018

Содержание вашего join() метода не имеет смысла.Вы вызываете метод объекта без использования объекта.

Соединение таким способом не используется.Вы должны использовать entityAlias.memberName

Попробуйте этот подход, если вы хотите использовать его в своем контроллере:

$pages = $this->getDoctrine()
              ->getRepository(Pages::class)
              ->createQueryBuilder('p') //Alias p for Page
              ->leftJoin('p.icon', 'i') //you are joining the icon member
              ->getQuery()
              ->getResult();

Но я предлагаю вам использовать Класс репозитория вместо:

В /src/Repository/PagesRepository.php:

class PagesRepository extends EntityRepository
{
    public function GetIcons()
    {
        $query = $this->createQueryBuilder('p') //Alias p for Page
                      ->leftJoin('p.icon', 'i') //you are joining the icon member
                      ->getQuery()
                      ->getResult();

        return (query);
    }
}

В вашем контроллере:

$pages = $this->getDoctrine()->getRepository(Pages::class)->GetIcons();

В вашей сущности:

/*
 * @ORM\Entity(repositoryClass="App\Repository\PagesRepository")
 */
class Pages
{
    //Your entity
}

Уникальная страница имеет уникальный значок.

Значок может иметь много страниц.

В контексте страницы это отношение ManyToOne (много страницможет иметь один значок)

В вашей сущности Page определение значка должно быть записано следующим образом:

/**
 * @var \Icons
 *
 * @ORM\ManyToOne(targetEntity="Icons")
 * @ORM\JoinColumn(name="icon", referencedColumnName="id")
 */
private $icon;

Для получения дополнительной информации см. документацию

...