{"id":551804,"date":"2026-07-31T11:18:13","date_gmt":"2026-07-31T11:18:13","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=551804"},"modified":"2026-07-31T12:38:02","modified_gmt":"2026-07-31T12:38:02","slug":"pimcore-field-collections-vs-object-bricks","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/","title":{"rendered":"Pimcore Field Collections vs Object Bricks: Which to Use"},"content":{"rendered":"<p>Every serious Pimcore data model hits the same question. You need to attach extra fields to an object, but plain fields are not enough.<\/p>\n<p>Pimcore gives you three tools for this. Field Collections, Object Bricks, and Classification Store each solve a different shape of the problem.<\/p>\n<p>Pick the wrong one and you pay for it later. You get awkward queries, blank variant data, or a class rebuild for every new attribute.<\/p>\n<p>This guide compares Pimcore Field Collections, Object Bricks, and Classification Store head-to-head. You will learn what each one is, how it stores data, and exactly when to reach for it.<\/p>\n<p>If you are new to the model layer, start with <a href=\"https:\/\/webkul.com\/blog\/data-objects-in-pimcore\/\">Data Objects in Pimcore<\/a> and <a href=\"https:\/\/webkul.com\/blog\/how-to-create-class-data-object-in-pimcore\/\">how to create a class Data Object in Pimcore<\/a>.<\/p>\n<h2>Pimcore Field Collections, Object Bricks, and Classification Store at a glance<\/h2>\n<p>Think of them as three different relationships to your object.<\/p>\n<ul>\n<li><strong>Field Collections<\/strong> \u2014 a repeatable, ordered list of field rows on one field. One-to-many.<\/li>\n<li><strong>Object Bricks<\/strong> \u2014 an optional field group that attaches to specific classes. A conditional mixin.<\/li>\n<li><strong>Classification Store<\/strong> \u2014 a runtime key\/value attribute matrix, extensible without a rebuild.<\/li>\n<\/ul>\n<p>You configure all three in Studio under Data Management &gt; Data Model Definitions. Each tool has its own definition editor there.<\/p>\n<h2>Pimcore Field Collections: repeatable ordered rows<\/h2>\n<p>A Field Collection is a reusable, repeatable, ordered list of fields. You add the same structured row many times to a single field.<\/p>\n<p>That makes it a one-to-many relationship. Think specs, phone numbers, price tiers, downloads, or channel-specific rows.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551808\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\" alt=\"pimcore-field-collections-editor\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<h3>Field Collection storage<\/h3>\n<p>Pimcore stores each Field Collection in its own dedicated table. The pattern is <code>object_collection_&lt;FcKey&gt;_&lt;classId&gt;<\/code>, with a localized variant <code>object_collection_&lt;FcKey&gt;_localized_&lt;classId&gt;<\/code>.<\/p>\n<p>All objects of the same class share this table. Because rows are identified by object id plus index, data stays separate from the base object and keeps it lean.<\/p>\n<h3>Field Collection API access<\/h3>\n<p>Call <code>$object-&gt;getMyFcField()<\/code>. It returns a <code>Fieldcollection<\/code> object that implements <code>Iterator<\/code>.<\/p>\n<p>You access items by index, fieldname, or type. Also, each item exposes <code>getFieldname()<\/code>, <code>getIndex()<\/code>, and <code>getType()<\/code>.<\/p>\n<p>Querying Pimcore Field Collections items across many objects means reading objects first, then filtering their rows. So the base object query table holds no Field Collection values.<\/p>\n<h3>Field Collection localization and relations<\/h3>\n<p>A Field Collection item can carry its own Localizedfields container. As a result, you get a clean two-axis model: the item axis crossed with the locale axis.<\/p>\n<p>For example, this pairs well with translation workflows like the <a href=\"https:\/\/webkul.com\/blog\/pimcore-deepl-bundle\/\">Pimcore DeepL Bundle<\/a>. Items can also hold relations.<\/p>\n<p>Querying Pimcore Field Collections by a localized field value is even harder than querying by a non-localized field. Therefore you must join both the FC table and the localization table.<\/p>\n<p>For most queryable attributes, store them as denormalized top-level fields instead. Meanwhile, keep the item structure for data you only read after loading the object.<\/p>\n<h3>Field Collection controls<\/h3>\n<p>The definition supports <code>allowedTypes<\/code>, <code>minItems<\/code>\/<code>maxItems<\/code>, <code>disallowReorder<\/code>, and collapsible UI. You also get <code>lazyLoading<\/code> to load individual fields on demand.<\/p>\n<h3>Querying Field Collections<\/h3>\n<p>Querying across objects by a Field Collection item value is hard. That is because the data lives in separate tables, not denormalized into the object query table.<\/p>\n<p>The built-in Listing API does not filter by Field Collection values. Instead, the workarounds are custom SQL, denormalizing key fields to the base object, or loading objects and filtering in memory.<\/p>\n<h2>Pimcore Object Bricks: optional field groups per class<\/h2>\n<p>An Object Brick is a reusable, developer-defined field group. It attaches conditionally to specific classes through an Objectbricks container field.<\/p>\n<p>Treat it as a mixin or an optional attribute set. Typically you get one brick per type per object, not an ordered repeating list.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551810\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor.webp\" alt=\"pimcore-object-bricks-editor\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-object-bricks-editor-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<h3>When to use it<\/h3>\n<p>Reach for a brick when only some objects need a set of fields. For instance, a <code>Car<\/code> class where only some cars carry an <code>Engine<\/code> brick is the classic case.<\/p>\n<p>Bricks let you avoid null, unused columns in the common case. So the fields appear only where they apply.<\/p>\n<h3>Binding<\/h3>\n<p>A brick declares which classes and fields it attaches to via <code>classDefinitions<\/code>. Then, at save time, <code>createContainerClasses()<\/code> adds the brick key to each target field&#8217;s <code>allowedTypes<\/code>.<\/p>\n<p>That binding is bidirectional. Therefore the brick knows its classes, and each class field knows its allowed bricks.<\/p>\n<h3>Storage<\/h3>\n<p>Pimcore creates per-bound-class tables. It names them <code>object_brick_store_&lt;brickKey&gt;_&lt;classId&gt;<\/code> and <code>object_brick_query_&lt;brickKey&gt;_&lt;classId&gt;<\/code>, plus localized variants when needed.<\/p>\n<p>Each store table uses an <code>(id, fieldname)<\/code> composite primary key. As a result, multiple brick types coexist in a single Objectbricks field.<\/p>\n<p>Pimcore stores each type separately under its own fieldname. So one container field can hold several distinct bricks.<\/p>\n<p>The query table gives bricks indexed lookups. Also, Pimcore validates table names to stay within 64 characters.<\/p>\n<h3>API access<\/h3>\n<p>Reach a field via <code>$object-&gt;getBricks()-&gt;getEngine()-&gt;getCylinders()<\/code>. Here the <code>getBricks()<\/code> call returns the container, and each brick type has its own typed getter.<\/p>\n<p>Pimcore generates a container class per class-field binding. It lives at <code>PIMCORE_CLASS_DIRECTORY\/DataObject\/&lt;ClassName&gt;\/&lt;FieldName&gt;.php<\/code>.<\/p>\n<h3>Inheritance<\/h3>\n<p>With class inheritance on, a child auto-creates an empty parent brick via <code>createParentBrick()<\/code> in <code>save()<\/code>. That empty brick lets values inherit down the chain.<\/p>\n<p>If class inheritance is off, no brick scaffolding is created, so the child will not inherit parent values. For how inheritance and variants behave at the class level, see <a href=\"https:\/\/webkul.com\/blog\/class-setting-in-pimcore\/\">class settings in Pimcore<\/a>.<\/p>\n<h3>The limit<\/h3>\n<p>An Object Brick is not a repeatable list. Instead you get one brick per type per object, and <code>maxItems<\/code> counts distinct types, not rows.<\/p>\n<p>Bricks must declare their class bindings. However, a free Field Collection has no such requirement.<\/p>\n<h2>Pimcore Classification Store: runtime attribute matrix<\/h2>\n<p>Classification Store is a single object field holding a dynamic key\/value attribute store. It organizes attributes in three tiers: Keys, Groups, and Group Collections, all tied to a Store.<\/p>\n<p>The store is unbounded and sparse. Values exist only for the groups you activate on an object.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551812\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor.webp\" alt=\"pimcore-classification-store-editor\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-classification-store-editor-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<h3>Runtime configuration<\/h3>\n<p>Admins create and toggle Keys, Groups, and Collections at runtime. Studio drives this through 29-plus CRUD controllers, not hardcoded class definitions.<\/p>\n<p>All this configuration is admin-facing through the Studio UI. So adding an attribute needs no class rebuild, which is the headline advantage.<\/p>\n<h3>When to use it<\/h3>\n<p>Use it for catalogs where categories need radically different attribute sets. For example, shoes need size and color, electronics need wattage, furniture needs material.<\/p>\n<p>Without it, you would create a class per category. Classification Store avoids that attribute explosion. That is why marketplace and PIM connectors like the <a href=\"https:\/\/webkul.com\/blog\/pimcore-magento-2-connector\/\">Pimcore Magento 2 Connector<\/a> lean on it.<\/p>\n<h3>Storage<\/h3>\n<p>Classification Store uses two layers. This split is exactly why it stays extensible at runtime without a rebuild.<\/p>\n<p>First, the global configuration layer. Tables like <code>classificationstore_keys<\/code>, <code>classificationstore_groups<\/code>, and <code>classificationstore_collections<\/code> define what attributes exist, and admins manage them.<\/p>\n<p>Next, the per-object data layer. Pimcore uses <code>object_classificationstore_data_&lt;classId&gt;<\/code> for values and <code>object_classificationstore_groups_&lt;classId&gt;<\/code> for active groups, one pair of tables per class.<\/p>\n<p>Because the config layer sits apart from the data layer, you add or retire attributes without touching class definitions. Each key carries a type, a JSON definition, and an enabled flag.<\/p>\n<h3>Localization<\/h3>\n<p>Localization is a per-key setting, since each key definition carries a localized flag.<\/p>\n<p>When the flag is true, Pimcore stores values with a language column. If it is false, the values stay language-agnostic.<\/p>\n<h3>Programmatic access<\/h3>\n<p>The <code>ClassificationStoreFieldDataMarshaller<\/code> handles read and write. Connectors set values via <code>$object-&gt;setClassificationStoreData()<\/code> without triggering a rebuild.<\/p>\n<h3>Inheritance<\/h3>\n<p>A child inherits values from all of the parent&#8217;s active groups, unless you explicitly deactivate a group. Also, metadata tracks each inherited value and its source object id.<\/p>\n<h3>The limit<\/h3>\n<p>Values are key\/value, not first-class columns. Because of that, filtering by a specific key needs table joins and is harder than querying a normal field.<\/p>\n<p>The <code>MarshallerService<\/code> persists values through normalization, not raw SQL types. Also, Pimcore does not support Grid and CSV export of these values.<\/p>\n<p>Do not use it for small, fixed attribute sets. Instead, plain fields or a Field Collection fit those better.<\/p>\n<h2>Pimcore Field Collections vs Object Bricks vs Classification Store, compared<\/h2>\n<p>Here is the same set of dimensions across all three.<\/p>\n<table style=\"width:100%;table-layout:fixed;border-collapse:collapse;word-break:break-word;overflow-wrap:anywhere\">\n<thead>\n<tr>\n<th>Dimension<\/th>\n<th>Field Collections<\/th>\n<th>Object Bricks<\/th>\n<th>Classification Store<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Shape<\/td>\n<td>Repeatable ordered rows (1-to-many)<\/td>\n<td>Optional single group per type<\/td>\n<td>Sparse key\/value matrix (group \u00d7 key)<\/td>\n<\/tr>\n<tr>\n<td>Bound to a class?<\/td>\n<td>No, free and reusable<\/td>\n<td>Yes, via <code>classDefinitions<\/code><\/td>\n<td>No, tied to a Store<\/td>\n<\/tr>\n<tr>\n<td>Who configures it<\/td>\n<td>Developer, at class level<\/td>\n<td>Developer, at class level<\/td>\n<td>Admin, at runtime (no rebuild)<\/td>\n<\/tr>\n<tr>\n<td>Storage table<\/td>\n<td>Dedicated per-class FC tables<\/td>\n<td>Per-class brick store + query tables<\/td>\n<td>Global config tables + per-object data tables<\/td>\n<\/tr>\n<tr>\n<td>Query support<\/td>\n<td>Weak (separate tables, no Listing API)<\/td>\n<td>Indexed query table per class<\/td>\n<td>Weak (marshalled key\/value)<\/td>\n<\/tr>\n<tr>\n<td>Localization<\/td>\n<td>Nested Localizedfields (2-axis)<\/td>\n<td>Inherits parent localized values<\/td>\n<td>Per-key language column when localized<\/td>\n<\/tr>\n<tr>\n<td>Inheritance<\/td>\n<td>Wholesale replace on variant<\/td>\n<td>Empty-parent-brick, per-field override<\/td>\n<td>Per-key, activeGroups propagate<\/td>\n<\/tr>\n<tr>\n<td>Best for<\/td>\n<td>Repeating rows: specs, tiers, channels<\/td>\n<td>Optional fields some objects need<\/td>\n<td>Many attributes across varied categories<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For queryable Field Collection fields, remember the workarounds. So run custom SQL, denormalize key fields to the base object, or load all objects and filter in memory.<\/p>\n<p>The built-in Listing API does not support Field Collection filtering. So plan for that before you model reporting on FC data.<\/p>\n<h2>Which one should you use?<\/h2>\n<p>Match the tool to the shape of your data. These rules cover most cases.<\/p>\n<ul>\n<li><strong>Choose Field Collections<\/strong> when you need multiple ordered rows of the same structure. Price tiers, phone numbers, and per-channel grids fit here.<\/li>\n<li><strong>Choose Object Bricks<\/strong> when only some objects need an extra field group. An optional <code>Engine<\/code> or <code>TechnicalSpecs<\/code> set is the textbook case.<\/li>\n<li><strong>Choose Classification Store<\/strong> when many categories need different attribute sets. Add attributes at runtime without touching class definitions.<\/li>\n<\/ul>\n<p>Now the anti-patterns. These are the wrong-tool mistakes teams make most.<\/p>\n<ul>\n<li><strong>Avoid Classification Store for small, fixed attribute sets.<\/strong> It renders awkwardly and conflates axes; use plain fields or a Field Collection.<\/li>\n<li><strong>Skip an Object Brick when you need a repeatable list.<\/strong> One brick per type is a hard ceiling, so switch to a Field Collection.<\/li>\n<li><strong>Reconsider Field Collections when you need queryable, first-class columns.<\/strong> Filtering and reporting want denormalized fields, not separate tables.<\/li>\n<\/ul>\n<p>One more axis matters: who owns change. Developers own Field Collections and Bricks, which need a rebuild. Admins own Classification Store, which does not.<\/p>\n<p>When to reach for Pimcore Field Collections again, in one line: any time the data is a repeating, ordered set of rows you read after loading the object.<\/p>\n<h2>Real gotchas to plan for<\/h2>\n<p>These traps bite teams in production. Design around them early.<\/p>\n<p><strong>The variant wholesale-replace trap.<\/strong> A variant&#8217;s Field Collection replaces the parent&#8217;s entirely. There is no per-field inheritance.<\/p>\n<p>Set one field on a variant&#8217;s FC item, and every other field the parent carried goes blank. Only wholesale-replace when the variant truly owns the full tuple.<\/p>\n<p>Otherwise, implement a merge. Copy the parent&#8217;s FC item, set the one field, then append the missing rows.<\/p>\n<p><strong>The variant Listing regression.<\/strong> A class Listing defaults its object types to object, variant, and folder.<\/p>\n<p>The moment a connector creates variant children, every existing Listing over that class starts returning variants too. Audit each Listing after you enable variants.<\/p>\n<p>Add <code>-&gt;setObjectTypes([OBJECT_TYPE_OBJECT])<\/code> wherever only top-level objects are meant.<\/p>\n<p><strong>Classification Store queryability.<\/strong> Its values are marshalled key\/value pairs, not columns. Cross-object filtering and reporting on specific keys stay weak.<\/p>\n<p>If you need heavy querying on an attribute, promote it to a real field. Reserve the store for the long tail of varied attributes.<\/p>\n<p><strong>The empty-parent-brick behavior.<\/strong> Bricks inherit only because Pimcore auto-creates an empty child brick when the parent has one.<\/p>\n<p>An Object Brick with inheritance off gets no scaffolding. So parent values never flow down to the child.<\/p>\n<h2>Conclusion<\/h2>\n<p>Pimcore Field Collections, Object Bricks, and Classification Store are not interchangeable. Each maps to a different data shape.<\/p>\n<p>Reach for Pimcore Field Collections when the data is repeatable ordered rows. Object Bricks fit optional field groups that only some classes need.<\/p>\n<p>Classification Store wins when many categories need different attributes, all configured at runtime.<\/p>\n<p>When you match the tool to the shape, your model stays clean and fast. Pick wrong, and you inherit awkward queries, blank variants, and needless rebuilds.<\/p>\n<p>Need help modeling a complex Pimcore catalog or building a connector around it? The <a href=\"https:\/\/webkul.com\/pimcore-development\/\">Webkul Pimcore team<\/a> can architect the data model and the integrations for you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every serious Pimcore data model hits the same question. You need to attach extra fields to an object, but plain fields are not enough. Pimcore gives you three tools for this. Field Collections, Object Bricks, and Classification Store each solve a different shape of the problem. Pick the wrong one and you pay for it <a href=\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":399,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8189],"tags":[8201,8486,8202,7703],"class_list":["post-551804","post","type-post","status-publish","format-standard","hentry","category-pimcore","tag-pimcore","tag-pimcore-connector","tag-pimcore-pim","tag-product-information-management"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pimcore Field Collections vs Object Bricks: Which to Use<\/title>\n<meta name=\"description\" content=\"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pimcore Field Collections vs Object Bricks: Which to Use\" \/>\n<meta property=\"og:description\" content=\"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-31T11:18:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T12:38:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\" \/>\n<meta name=\"author\" content=\"Nitesh Arora\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nitesh Arora\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\"},\"author\":{\"name\":\"Nitesh Arora\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\"},\"headline\":\"Pimcore Field Collections vs Object Bricks: Which to Use\",\"datePublished\":\"2026-07-31T11:18:13+00:00\",\"dateModified\":\"2026-07-31T12:38:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\"},\"wordCount\":1987,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\",\"keywords\":[\"Pimcore\",\"Pimcore connector\",\"Pimcore PIM\",\"Product Information Management\"],\"articleSection\":[\"PimCore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\",\"url\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\",\"name\":\"Pimcore Field Collections vs Object Bricks: Which to Use\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\",\"datePublished\":\"2026-07-31T11:18:13+00:00\",\"dateModified\":\"2026-07-31T12:38:02+00:00\",\"description\":\"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp\",\"width\":1529,\"height\":757,\"caption\":\"pimcore-field-collections-editor\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pimcore Field Collections vs Object Bricks: Which to Use\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\",\"name\":\"Nitesh Arora\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Nitesh Arora\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pimcore Field Collections vs Object Bricks: Which to Use","description":"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/","og_locale":"en_US","og_type":"article","og_title":"Pimcore Field Collections vs Object Bricks: Which to Use","og_description":"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12","og_url":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-07-31T11:18:13+00:00","article_modified_time":"2026-07-31T12:38:02+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp","type":"","width":"","height":""}],"author":"Nitesh Arora","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Nitesh Arora","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/"},"author":{"name":"Nitesh Arora","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0"},"headline":"Pimcore Field Collections vs Object Bricks: Which to Use","datePublished":"2026-07-31T11:18:13+00:00","dateModified":"2026-07-31T12:38:02+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/"},"wordCount":1987,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp","keywords":["Pimcore","Pimcore connector","Pimcore PIM","Product Information Management"],"articleSection":["PimCore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/","url":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/","name":"Pimcore Field Collections vs Object Bricks: Which to Use","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp","datePublished":"2026-07-31T11:18:13+00:00","dateModified":"2026-07-31T12:38:02+00:00","description":"Pimcore Field Collections vs Object Bricks vs Classification Store: what each is, how it stores data, and when to use which in Pimcore 12","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-field-collections-editor.webp","width":1529,"height":757,"caption":"pimcore-field-collections-editor"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/pimcore-field-collections-vs-object-bricks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pimcore Field Collections vs Object Bricks: Which to Use"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0","name":"Nitesh Arora","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Nitesh Arora"},"url":"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/399"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=551804"}],"version-history":[{"count":7,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551804\/revisions"}],"predecessor-version":[{"id":551825,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551804\/revisions\/551825"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=551804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=551804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=551804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}