# |
Dec 28th 2018, 13:03 |
challgren |
Or have associated tables |
# |
Dec 28th 2018, 13:03 |
G00DSP33D |
That's why we try to keep it dynamic. |
# |
Dec 28th 2018, 13:03 |
G00DSP33D |
The problem is that we don't want to go crazy wide with columns in our Pages table |
# |
Dec 28th 2018, 13:03 |
challgren |
Have you looked into https://book.cakephp.org/3.0/en/orm/query-builder.html |
# |
Dec 28th 2018, 13:02 |
admad |
replacement for notEmpty are specific `allowEmpty*` functions https://github.com/cakephp/bake/pull/486 |
# |
Dec 28th 2018, 13:02 |
challgren |
You'll need the typemap |
# |
Dec 28th 2018, 13:02 |
G00DSP33D |
We also know that MySQL now supports true JSON fields, so we're also looking into getting those to work with CakePHP. |
# |
Dec 28th 2018, 13:02 |
challgren |
I personally would suggest just storing those dynamic fields non-dynamic and then changing the validation set based on the product type |
# |
Dec 28th 2018, 13:02 |
admad |
There is no replacement $hasRendered. In 4.x you can simply call render() multiple times |
# |
Dec 28th 2018, 13:01 |
G00DSP33D |
Yes, fully agree, awesome features in there! |
# |
Dec 28th 2018, 13:00 |
G00DSP33D |
But thanks for the suggestion you gave, that could already help us with the validation part. |
# |
Dec 28th 2018, 13:00 |
challgren |
It takes a bit but once you understand it, its a much better platform than 2.x |
# |
Dec 28th 2018, 13:00 |
G00DSP33D |
We're also still wrapping our heads around this migration |
# |
Dec 28th 2018, 13:00 |
challgren |
Im kind of in the same boat converting from 2.10 to 3.6-7 |
# |
Dec 28th 2018, 13:00 |
G00DSP33D |
Haha, understand you completely challgren |
# |
Dec 28th 2018, 12:59 |
challgren |
Granted I'm a 3.x newbie (Kind of in the same boat you are) but not that Im aware of but someone else may have more knowledge on that |
# |
Dec 28th 2018, 12:59 |
G00DSP33D |
Now in 2.x we have to use REGEX to get that done, which is off course horrendous work and extremely slow. |
# |
Dec 28th 2018, 12:58 |
G00DSP33D |
Our second question is whether CakePHP 3.x now offers any way to query against serialized data using complex data types. If "price" is serialized into a JSON string, can we now for example sort our product pages by price? Or query to select pages with a certain minimum price? |
# |
Dec 28th 2018, 12:57 |
G00DSP33D |
Aha thanks <slackebot>, that looks interesting. |
# |
Dec 28th 2018, 12:56 |
G00DSP33D |
So we were happy to learn that support for comp[lex data types has been added in 3.x. But we're wondering whether there are now more intelligent way stop do what we are doing in terms of validation. |
# |
Dec 28th 2018, 12:56 |
challgren |
https://book.cakephp.org/3.0/en/orm/validation.html#using-a-different-validation-set |
# |
Dec 28th 2018, 12:56 |
challgren |
You can use different validation sets |
# |
Dec 28th 2018, 12:55 |
G00DSP33D |
So we dynamically add those validation rules in the beforeValidate. This allowed us to validate field values that are serialized into JSON later on. |
# |
Dec 28th 2018, 12:54 |
G00DSP33D |
Our approach: in beforeValidate we check the contents of the field Page.type. Let's say that it contains "product_page". In a CakePHP Config we kept a list of "dynamic fields" per page type, and their respective validation rules. |
# |
Dec 28th 2018, 12:53 |
challgren |
If you want tha ability to sort or filter |
# |
Dec 28th 2018, 12:52 |
challgren |
You may need to define those fields even if they are unnecessary for every record |
# |
Dec 28th 2018, 12:51 |
challgren |
I run an app that integrates with QBO but I dont store dynamic data in JSON |
# |
Dec 28th 2018, 12:51 |
G00DSP33D |
For example, our light approach doesn't allow us to sort products by price for example (unless we jump through a lot of hoops). |
# |
Dec 28th 2018, 12:51 |
challgren |
You could define a custom validation rule but Im not very familiar with it |
# |
Dec 28th 2018, 12:50 |
G00DSP33D |
Since we are now upgrading to 3.x, we're left wondering whether there are better ways to handle this light "Entity-Atribute-Value" setup. |
# |
Dec 28th 2018, 12:49 |
G00DSP33D |
So in CakePHP 2.x we used a TEXT field in the DB to store these "dynamic" properties. Depending on the page type, we dynamically added validation rules inthe beforeValidate callback. |
# |
Dec 28th 2018, 12:48 |
G00DSP33D |
Our CMS has a simplified take on the EAV pattern for storing dynamic data about webpage. A product page will have different data fields (price, weight, etc.) compared to a blog post (intro txt, etc.). |
# |
Dec 28th 2018, 12:47 |
challgren |
Like how so? |
# |
Dec 28th 2018, 12:47 |
G00DSP33D |
Thanks challgren for your suggestion. This behaviour is a great take on serializing JSON data, but we're looking for something more advanced. |
# |
Dec 28th 2018, 11:50 |
challgren |
@g00dsp33d look into https://github.com/dereuromark/cakephp-tools/blob/master/docs/Behavior/Jsonable.md |
# |
Dec 28th 2018, 11:06 |
G00DSP33D |
Any help / tips / pointers would be much appreciated! |
# |
Dec 28th 2018, 11:06 |
G00DSP33D |
In 3.x we're looking at the complex data types feature to help us, but we're unsure about 2 things. Should we follow our previous logic for validation or is there a better way? And is there any way in 3.x to query the database and search for a specific field value that is stored as a JSON string? |
# |
Dec 28th 2018, 11:06 |
birdy247 |
it was not setting ->useImmutable() |
# |
Dec 28th 2018, 11:06 |
birdy247 |
Ok, @dereuromark @steinkel it was our own datatype that had the issue |
# |
Dec 28th 2018, 11:04 |
G00DSP33D |
If validation was successful, we then took all the dynamic fields, apply json_encode() and store the data in the big TEXT field as a JSON string. |
# |
Dec 28th 2018, 11:03 |
G00DSP33D |
Our system was developed in 2.x and during this holiday season we're finally taking the plunge into 3.x. In 2.x we used a TEXT field in the DB to store dynamic field data as a JSON string. In order to ensure validation, we collected individual fields separately in the form. If a dynamic field was found in the form, we would dynamically add the necessary validation rules, so each field was validated. |