IntegrityConstraintViolationException for menu links with parents that don't have a derivative id
>>> [!note] Migrated issue <!-- Drupal.org comment --> <!-- Migrated from issue #3202284. --> Reported by: [feyp](https://www.drupal.org/user/998680) >>> <h3 id="summary-problem-motivation">Problem/Motivation</h3> <p>Creating menu links with a parent that doesn't have a derivative plugin id will result in an integrity constraint violation for the <code>parent_uuid</code> column of <code>menu_entity_index</code> table.</p> <h4 id="summary-steps-reproduce">Steps to reproduce</h4> <ol> <li>Install Drupal 9.x with standard profile and enable Menu Entity Index</li> <li>Configure Menu Entity Index to track content entities in main menu.</li> <li>Create a new node.</li> <li>Create a new menu link in main menu for your node and select "Home" as parent link.</li> </ol> <h4>Expected result</h4> <p>Menu link created and tracked by Menu Entity Index.</p> <h4>Actual result</h4> <p>White page with error messages:</p> <p><code>Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'parent_uuid' cannot be null: INSERT INTO "menu_entity_index" ("menu_name", "level", "entity_type", "entity_subtype", "entity_id", "entity_uuid", "parent_type", "parent_id", "parent_uuid", "langcode", "target_type", "target_subtype", "target_id", "target_uuid", "target_langcode") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10, :db_insert_placeholder_11, :db_insert_placeholder_12, :db_insert_placeholder_13, :db_insert_placeholder_14); Array ( [:db_insert_placeholder_0] =&gt; main [:db_insert_placeholder_1] =&gt; 1 [:db_insert_placeholder_2] =&gt; menu_link_content [:db_insert_placeholder_3] =&gt; menu_link_content [:db_insert_placeholder_4] =&gt; 1 [:db_insert_placeholder_5] =&gt; 49c4870e-6a83-4a11-a968-f5e4556dd0e7 [:db_insert_placeholder_6] =&gt; standard.front_page [:db_insert_placeholder_7] =&gt; [:db_insert_placeholder_8] =&gt; [:db_insert_placeholder_9] =&gt; en [:db_insert_placeholder_10] =&gt; node [:db_insert_placeholder_11] =&gt; article [:db_insert_placeholder_12] =&gt; 1 [:db_insert_placeholder_13] =&gt; a4108218-0d5f-4d2c-8322-4e8bfcb66d5b [:db_insert_placeholder_14] =&gt; en ) in Drupal\Core\Database\Driver\mysql\ExceptionHandler-&gt;handleExecutionException() (line 47 of core/lib/Drupal/Core/Database/Driver/mysql/ExceptionHandler.php).</code></p> <p><code>Drupal\Core\Entity\EntityStorageException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'parent_uuid' cannot be null: INSERT INTO "menu_entity_index" ("menu_name", "level", "entity_type", "entity_subtype", "entity_id", "entity_uuid", "parent_type", "parent_id", "parent_uuid", "langcode", "target_type", "target_subtype", "target_id", "target_uuid", "target_langcode") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10, :db_insert_placeholder_11, :db_insert_placeholder_12, :db_insert_placeholder_13, :db_insert_placeholder_14); Array ( [:db_insert_placeholder_0] =&gt; main [:db_insert_placeholder_1] =&gt; 1 [:db_insert_placeholder_2] =&gt; menu_link_content [:db_insert_placeholder_3] =&gt; menu_link_content [:db_insert_placeholder_4] =&gt; 1 [:db_insert_placeholder_5] =&gt; 49c4870e-6a83-4a11-a968-f5e4556dd0e7 [:db_insert_placeholder_6] =&gt; standard.front_page [:db_insert_placeholder_7] =&gt; [:db_insert_placeholder_8] =&gt; [:db_insert_placeholder_9] =&gt; en [:db_insert_placeholder_10] =&gt; node [:db_insert_placeholder_11] =&gt; article [:db_insert_placeholder_12] =&gt; 1 [:db_insert_placeholder_13] =&gt; a4108218-0d5f-4d2c-8322-4e8bfcb66d5b [:db_insert_placeholder_14] =&gt; en ) in Drupal\Core\Entity\Sql\SqlContentEntityStorage-&gt;save() (line 810 of core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).</code></p> <h3 id="summary-proposed-resolution">Proposed resolution</h3> <p>The <code>parent_uuid</code> column is filled with the derivative id of the parent link (<code>$parent_link-&gt;getDerivativeId()</code>), if it exists. Since this method may return <code>NULL</code>, but the database schema doesn't accept <code>null</code> values, we should cast the return value of that method to a string.</p>
issue