Problem/Motivation
In some configurations the views data seems to be insufficient which causes the Taxonomy term filter for views to try to taxonomy_term_field_data
to itself. However, this is not a defined join in the views data which causes the reported error Attempt to assign property "extra" on null in Drupal\views\ManyToOneHelper->ensureMyTable() (line 205 of /var/www/html/web/core/modules/views/src/ManyToOneHelper.php)
(see original report for the full stack trace).
Steps to reproduce
- Install Drupal
- Create a new taxonomy vocabulary
- Create a custom content entity
- using
Drupal\views\EntityViewsData
as view data handler - Ensure the entity does not have bundles.
- In the base field definition provide an entity_reference field to the taxonomy
- using
- Create a view with a page
- Add the taxonomy term as relationship
- Add an exposed filter for the taxonomy term, widget does not matter
- Create at least one custom entity
- Create at least one taxonomy term in the created vocabulary
- Attempt to search using the exposed taxonomy term
Proposed resolution
Remaining tasks
- Validate reproduction steps
User interface changes
API changes
Data model changes
Release notes snippet
Original report
Hi i came across views filter wsod and I dont know why.
I am migrating drupal 7 to 9 commerce.
After UI migration I created a view of all the products from our store.
I created relationships with taxonomy terms which are (rings, earrings, bracelets)
When I created a dropdown filter list to select the specific term and filter the products by that term. I get wsod immediately.
I also created other filters for other taxonomy terms like the type of stones the jewelry has. I used exactly the same steps and it works with no problem.
Also exposed filter for published, unpublished products work.
So when I select dropdown for the specific term for taxomomy rings, earrings, bracelets I get this error in watchdog
Error: Attempt to assign property "extra" on null in Drupal\views\ManyToOneHelper->ensureMyTable() (line 205 of /var/www/html/web/core/modules/views/src/ManyToOneHelper.php)
#0 /var/www/html/web/core/modules/views/src/Plugin/views/filter/ManyToOne.php(123): Drupal\views\ManyToOneHelper->ensureMyTable()
#1 /var/www/html/web/core/modules/views/src/ManyToOneHelper.php(262): Drupal\views\Plugin\views\filter\ManyToOne->ensureMyTable()
#2 /var/www/html/web/core/modules/views/src/Plugin/views/filter/ManyToOne.php(136): Drupal\views\ManyToOneHelper->addFilter()
#3 /var/www/html/web/core/modules/views/src/Plugin/views/filter/InOperator.php(390): Drupal\views\Plugin\views\filter\ManyToOne->opHelper()
#4 /var/www/html/web/core/modules/views/src/ViewExecutable.php(1373): Drupal\views\Plugin\views\filter\InOperator->query(false)
#5 /var/www/html/web/core/modules/views/src/ViewExecutable.php(1262): Drupal\views\ViewExecutable->_build('filter')
#6 /var/www/html/web/core/modules/views/src/Plugin/views/display/PathPluginBase.php(392): Drupal\views\ViewExecutable->build()
#7 /var/www/html/web/core/modules/views/src/Plugin/views/display/Page.php(196): Drupal\views\Plugin\views\display\PathPluginBase->execute()
#8 /var/www/html/web/core/modules/views/src/ViewExecutable.php(1630): Drupal\views\Plugin\views\display\Page->execute()
#9 /var/www/html/web/core/modules/views/src/Element/View.php(81): Drupal\views\ViewExecutable->executeDisplay('page_1', Array)
#10 [internal function]: Drupal\views\Element\View::preRenderViewElement(Array)
#11 /var/www/html/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(101): call_user_func_array(Array, Array)
#12 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(772): Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_ren...', 'exception', 'Drupal\\Core\\Ren...')
#13 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(363): Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array)
#14 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(201): Drupal\Core\Render\Renderer->doRender(Array, false)
#15 /var/www/html/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(241): Drupal\Core\Render\Renderer->render(Array, false)
#16 /var/www/html/web/core/lib/Drupal/Core/Render/Renderer.php(564): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#17 /var/www/html/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(242): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#18 /var/www/html/web/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(132): Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#19 /var/www/html/web/core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\CurrentRouteMatch))
#20 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#21 /var/www/html/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(142): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#22 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(163): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Symfony\Component\HttpKernel\Event\ViewEvent), 'kernel.view')
#23 /var/www/html/vendor/symfony/http-kernel/HttpKernel.php(80): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#24 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/Session.php(58): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#25 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#26 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#27 /var/www/html/web/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#28 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#29 /var/www/html/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#30 /var/www/html/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#31 /var/www/html/web/core/lib/Drupal/Core/DrupalKernel.php(709): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#32 /var/www/html/web/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#33 {main}
thank you for looking into it. I can provide additional info if needed.