Мой вопрос сильно связан с этим Неопределенный индекс: inverseJoinColumns при попытке для определения отношения ManyToMany между двумя объектами
Я пытаюсь найти все книги, в которых нет раздела. ->findBy(массив("раздел"=>null)
Вот моя конфигурация Entity: EditedBooks
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Sections", inversedBy="editedBook")
* @ORM\JoinTable(name="edited_book_has_section",
* joinColumns={
* @ORM\JoinColumn(name="edited_book_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="section_id", referencedColumnName="id")
* }
* )
*/
private $section;
Вот моя конфигурация Entity: Sections
/**
* Bidirectional (INVERSE SIDE)
*
* @ORM\ManyToMany(targetEntity="EditedBooks", mappedBy="section")
*/
private $editedBook;
Ошибка, которую я получаю
Неопределенный индекс: joinColumns в BasicEntityPersister.php
Я попробовал это также только с
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Sections", inversedBy="editedBook")
* @ORM\JoinTable(name="edited_book_has_section")
*/
или переключение определения, но затем я получаю эту ошибку
You cannot search for the association field '\Entity\EditedBooks#section', because it is the inverse side of an association. Find methods only work on owning side associations.
Временное решение. Сегодня я попытался решить проблему с построителем запросов в моем репозитории editedBooksRepository.
$query = $qb->select('books')
->from('Bundle:EditedBooks', 'books')
->leftJoin('books.section', 'sec')
->addSelect('COUNT(sec.id) AS sec_count')
->andWhere('sec_count = 0');
Но я получил следующую ошибку:
Исключение произошло при выполнении 'SELECT e0_.id КАК id0, e0_.doi КАК doi1, e0_.isbn_print КАК isbn_print2, e0_.isbn_electronic КАК isbn_electronic3, e0_.publication_date КАК публикация_date4, e0_.price_print КАК price_print5, e0_.price_electronic КАК price_electronic6, e0_ .summary КАК резюме7, e0_.title КАК title8, e0_.постоянно КАК в процессе9, e0_.pages КАК страницы10, e0_.иллюстрации КАК иллюстрации11, e0_.entry_date КАК entry_date12, e0_.google_id КАК google_id13, e0_.specialIssue_comment КАК specialIssue_comment14, e0_.deleted КАК удалён15, e0_.specialIssue_id КАК specialIssue_id16, COUNT(s1_.id) КАК sclr17, e0_.book_series_id КАК book_series_id18, e0_.copyright_id КАК copyright_id19, e0_.publisher_id КАК publisher_id20 ИЗ edited_books e0_ ЛЕВОЕ СОЕДИНЕНИЕ НА edited_book_has_section e0_.id = e2_.editedbooks_id ЛЕВОЕ СОЕДИНЕНИЕ разделов s1_ ON s1_.id = e2_.sections_id ГДЕ sclr17 = 0':
SQLSTATE[42S22]: столбец не найден: 1054 Неизвестный столбец «sclr17» в «предложении where»
но мне кажется, что sclr17 существует, я что-то упустил?
Уродливый обходной путь Я знаю, что это неправильно, но иногда мужчина должен делать то, что должен делать мужчина:
$noSection = new Sections();
$noSection->setTitle("Sectionless");
//add all the books
$noSection->setEditedBook(new ArrayCollection($books));
//remove the assigned ones
foreach($sections as $section){
$sBooks = $section->getEditedBook();
foreach($sBooks as $b){
$noSection->removeEditedBook($b);
}
}
С грязным исправлением теперь все работает, но я рад любому другому решению.