Log message #4171319

# At Username Text
# Dec 28th 2018, 13:05 admad using json field for variable content fields/blobs is fine, EAV can be overkill
# Dec 28th 2018, 13:05 G00DSP33D also true
# Dec 28th 2018, 13:04 challgren Nah you dont need all the extra controllers and views
# Dec 28th 2018, 13:04 G00DSP33D We did that in the past, but required to set up extra controllers, models, views, etc., next to all the extra SQL work. Right now in order to add a new field, we just add a new element to an array and it's done.
# Dec 28th 2018, 13:03 challgren base_table -> attribute_table
# 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!