Jump to content

Confused with Selector queries


alevine
 Share

Recommended Posts

I feel like I'm getting super lost with all of my questions today :)

I have a Checkbox field, "premium".

This field is added to a template, myContent

I have 2 pages created with the myContent template.  One has premium checked, the other does not.

My query is:  Show me all Pages using 'myContent' as a template, and whose premium field is not selected (0):

 selector:   template=myContent,premium=0

This query is returning 2 Pages, which is should not.  When I iterate through the returned list, I can see ->premium as set 1 for one, 0 for the other.

If I change "premium" in the selector to some random value that doesn't exist as a field name, the query runs and still returns 2 Pages.

 selector:   template=myContent,feujfhejhejejhejhefje=0

I would think it should error out, but instead seems to be doing a short-circuit evaluation.  Are comma-delimited selectors not "AND"ed together?

If I place the premium field at the start, or even by itself

 selector:   premium=0

I get this error:

Notice: Uninitialized string offset: 0 in C:\dev\xampp\htdocs\pwire\wire\core\Selector.php on line 49

Fatal error: Exception: Field does not exist: (in C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php line 248)

#0 [internal function]: PageFinder->___getQuery(Object(Selectors))
#1 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(271): call_user_func_array(Array, Array)
#2 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(229): Wire->runHooks('getQuery', Array)
#3 C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php(145): Wire->__call('getQuery', Array)
#4 C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php(145): PageFinder->getQuery(Object(Selectors))
#5 C:\dev\xampp\htdocs\pwire\wire\core\Pages.php(144): PageFinder->find(Object(Selectors), Array)
#6 [internal function]: Pages->___find('=0')
#7 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(271): call_user_func_array(Array, Array)
#8 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(229): Wire->runHooks('find', Array)
#9 C:\dev\xampp\htdocs\pwire\site\assets\cache\HannaCode\pages_query.php(3): Wire->__call('find', Array)
#10 C:\dev\xampp\htdocs\pwire\site\assets\cache\HannaCode\pages_que in C:\dev\xampp\htdocs\pwire\index.php on line 214

Please point out what I'm doing wrong!

Thank you.  Again! :)

Link to comment
Share on other sites

The Fatal Errors suggests you do not have a field by that name. Have you checked typos? Do you really have a field called premium? Otherwise your selector should work. Also post your query code here if you've doubled-checked field name is correct...Uninitialised string offset error can also occur if you are treating a string as an array...

Link to comment
Share on other sites

The Fatal Errors suggests you do not have a field by that name. Have you checked typos? Do you really have a field called premium? Otherwise your selector should work. Also post your query code here if you've doubled-checked field name is correct...Uninitialised string offset error can also occur if you are treating a string as an array...

As I showed in some of the examples, I can retrieve values from ->premium when the Pages are returned.  As well, the query doesn't error if I give it nonsense for a field name as a 2nd+ selector value.

Query code (as Hanna code entry):

$foundPages = $pages->find($pagesQuery);

echo serialize($foundPages);

Field:  query_pages, Type: Concat

value:  [[pages_query pagesQuery=template=myContent,premium=0]]

The above value returns 2 pages, when it should only return one.  If I look at ->premium on those 2 returns, one is 1, one is 0.

I've tried putting the value for pagesQuery in single (') and double (") quotes; with either form of quotes, I get:

Notice: Uninitialized string offset: 0 in C:\dev\xampp\htdocs\pwire\wire\core\Selector.php on line 49

Fatal error: Exception: Field does not exist: (in C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php line 248)

#0 [internal function]: PageFinder->___getQuery(Object(Selectors))

#1 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(271): call_user_func_array(Array, Array)

#2 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(229): Wire->runHooks('getQuery', Array)

#3 C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php(145): Wire->__call('getQuery', Array)

#4 C:\dev\xampp\htdocs\pwire\wire\core\PageFinder.php(145): PageFinder->getQuery(Object(Selectors))

#5 C:\dev\xampp\htdocs\pwire\wire\core\Pages.php(144): PageFinder->find(Object(Selectors), Array)

#6 [internal function]: Pages->___find('template=myCon...')

#7 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(271): call_user_func_array(Array, Array)

#8 C:\dev\xampp\htdocs\pwire\wire\core\Wire.php(229): Wire->runHooks('find', Array)

#9 C:\dev\xampp\htdocs\pwire\site\assets\cache\HannaCode\pages_query.php(3): Wire->__call('find', Array)

#10 C:\dev\xampp\htdocs\pwire\site\assets\cache\Han in C:\dev\xampp\htdocs\pwire\index.php on line 214

Link to comment
Share on other sites

Okay, here's something.

If I move the query to my page, it's picking up the additional parameter to the query

$myPics = $pages->find("template=myContent,premium=0");

So, this tells me somewhere in the translation between defining the Hanna code, the field declaration, and invocation, only the first parameter (template=...) is being picked up, and everything after is being stripped. 

The Hanna code is only receiving "template=myContent"

If I change the field value to be sent in quotes:

[[pages_query pagesQuery=template=myContent,premium=0]]

Hanna is getting: :  template=myContent,=0

Im sure it has something to do with using the Concat fieldtype doing value substitution.

Thoughts on what I need to do to amend that?

EDIT:  The selectors are fine.  I just need to modify the Concat module to not do value substitution and all is well.  Once I get my selector properly escaped, that is for including a $page reference in the query.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...