Problem/Motivation

When doing a simple EQ on a top-level array property of a config entity, this warning is given:

<b>Warning</b>:  mb_strtolower() expects parameter 1 to be string, array given in <b>/home/andrei/work/d8.dev/core/lib/Drupal/Component/Utility/Unicode.php</b> on line <b>295</b>

Proposed resolution

Fix it :)

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

amateescu’s picture

Status: Active » Needs review
FileSize
1.2 KB

Here's a test-only patch that shows the problem.

amateescu’s picture

FileSize
1.23 KB

Scratch that, the test data has to be even simpler.

The last submitted patch, 1: 2248567-config_eq_one_level_array-test-only.patch, failed testing.

amateescu’s picture

FileSize
1.21 KB

That test class makes it sooo difficult to add something to it without having to update all the assertions. This one should be more clear about the bug at hand.

The last submitted patch, 2: 2248567-2.patch, failed testing.

Status: Needs review » Needs work

The last submitted patch, 4: 2248567-5.patch, failed testing.

amateescu’s picture

Status: Needs work » Closed (works as designed)

Ok, nevermind me, the property.* syntax seems to work.

amateescu’s picture

Title: Config entity query doesn't work when matching a top-level array property » Config entity query doesn't work when matching an array property as content EQ does
Category: Bug report » Task
Status: Closed (works as designed) » Active

Discussed a bit with chx. Doing this would mean we need to load config schemas to know that the condition field holds an array.

amateescu’s picture

FileSize
3.04 KB

And here's a first shot at it, also from chx. Tested locally and not fully working, but it's a start at least :)

chx’s picture

Title: Config entity query doesn't work when matching an array property as content EQ does » Config entity query doesn't work when matching an array property

The title is wrong: content entities can't do this because content entities can't store an array. It is sensible that a foo: [1, 2, 3] be matched with condition('foo', 1) that's for sure but there's nothing similar in content entities .

Berdir’s picture

Well, content entities don't have arrays, but they have list of values, condition('tags.target_id', 5) with a multi-value tags reference field is a very similar situation as far as the API is concerned?

chx’s picture

There's a huge difference between $node->field[0]->target_id $node->field[1]->target_id and foo: [1, 2, 3]. Once again: the expectation is expected :) so this might be a bug but there's nothing in content mirroring this.

chx’s picture

Assigned: Unassigned » chx
chx’s picture

Assigned: chx » Unassigned

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

pfrenssen’s picture

To make it clear, here is the correct way of adding an array condition to an entity query for a config entity.

This is wrong, it throws "mb_strtolower() expects parameter 1 to be string, array given":

$query = \Drupal::entityTypeManager()->getStorage('my_config_entity')->getQuery();
$query->condition('my_property', ['my_value'], 'IN');
$query->execute(); // Error: mb_strotolower() expects parameter 1 to be string

Instead do this:

$query = \Drupal::entityTypeManager()->getStorage('my_config_entity')->getQuery();
$query->condition('my_property.*', 'my_value');
$query->execute();
hchonov’s picture

@pfrenssen, thank you for providing the example.

However it is very confusing for developers if an entity query for content entities and config entities has to be used differently when searching for a value in an array (config entities) / multiple field (content entities). I think that we could offer an consistent way for such queries.

jhedstrom’s picture

I wonder if an assert could be added somewhere to provide better feedback to developers if the incorrect approach outlined in #21 is used instead of the correct approach (eg, assert the value is a string not an array.)

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

hadros’s picture

@pfrenssen thanks man

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.