Cloud HostingLaunch UnoPim on fully-managed cloud hosting — fast, secure and cost-effective plans.
Skip to content

Entity Mapping

This page describes what each Akeneo entity becomes in UnoPim — the field-level detail behind the entity list. Read it when you want to know exactly where your data will land, or when the Job Tracker log says a record was skipped and you need to know why.

Entities always import in dependency order, no matter which order you tick them in, so prerequisites exist before the records that need them.


Locales

Akeneo locales become UnoPim locales, matched on code.

AkeneoUnoPim
codecode
enabledStatus (enabled / disabled)

An existing UnoPim locale is never replaced — only its status is brought in line with Akeneo.


Currencies

Akeneo currencies become UnoPim currencies, matched on code (upper-cased).

AkeneoUnoPim
codecode, upper-cased
symbolSymbol — falls back to the code when Akeneo has none
enabledStatus (enabled / disabled)

Attributes

Attributes come across with their labels, flags, and — for select types — their full option list.

Type mapping

Akeneo typeUnoPim type
pim_catalog_identifiertext
pim_catalog_texttext
pim_catalog_textareatextarea
pim_catalog_simpleselectselect
pim_catalog_multiselectmultiselect
pim_catalog_booleanboolean
pim_catalog_datedate
pim_catalog_numbertext (with numeric validation)
pim_catalog_metrictext (with numeric validation)
pim_catalog_priceprice
pim_catalog_price_collectionprice
pim_catalog_imageimage
pim_catalog_filefile
pim_catalog_asset_collectionasset
pim_catalog_reference_data_simpleselectselect
pim_catalog_reference_data_multiselectmultiselect
pim_catalog_tableNot supported — skipped
akeneo_reference_entityNot supported — skipped
akeneo_reference_entity_collectionNot supported — skipped

An attribute with an unsupported type is skipped and the reason is written to the run log, so you can decide how to model it in UnoPim by hand.

Flags

AkeneoUnoPim
localizableValue per locale
scopableValue per channel
uniqueIs unique
useable_as_grid_filterIs filterable
wysiwyg_enabledEnable WYSIWYG
sort_orderPosition

Existing attributes keep their type

If an attribute code already exists in UnoPim with a different type, the import updates its labels and flags but keeps the existing type, and logs that it did:

[attributes] 'weight' already exists as 'measurement' in UnoPim; keeping that type
instead of 'text' so stored values stay valid.

This protects data you have already stored — most importantly UnoPim measurement attributes, which Akeneo describes as plain metric attributes.

TIP

If an earlier import rewrote a measurement attribute's type before this safeguard existed, php artisan akeneo-migration:fix-attribute-types restores it. See Artisan Commands.

Options

Select and multiselect options are synced with their labels and sort order. Option codes are matched case-insensitively, and UnoPim's own spelling of the code is kept — so an Akeneo option RED resolves to an existing UnoPim option red rather than creating a duplicate.


Attribute Groups

Akeneo attribute groups become UnoPim attribute groups, with their labels, matched on code.


Attribute Families

Akeneo families become UnoPim attribute families. The family's attributes are placed into the attribute groups they belong to, in Akeneo's order.

  • A family whose attributes resolve to no attribute groups is skipped, with a log line naming it. Import Attributes and Attribute Groups first and it will import cleanly.
  • Re-importing an existing family adds attributes it does not yet have. It does not remove attributes you added in UnoPim.

Categories

The Akeneo category tree becomes the UnoPim category tree.

  • Records are sorted parents-first before importing, so a child never arrives before its parent.
  • Akeneo labels become locale-specific category values.
  • The parent link is resolved by code, preserving the shape of the tree.

Channels

Akeneo channels (scopes) become UnoPim channels.

AkeneoUnoPim
codecode
labelsChannel name, per locale
category_treeRoot category — resolved by code
localesThe channel's locales
currenciesThe channel's currencies, upper-cased

If Akeneo's category tree has not been imported yet, the channel falls back to an existing root category rather than failing.

NOTE

Import Locales, Currencies, and Categories before Channels — the default dependency order already does this for you.


DAM Assets

Available only when the UnoPim DAM extension is installed.

Each Akeneo asset family becomes a directory in the DAM library, and each asset in it is downloaded and stored there.

  • The file used is the asset family's attribute as main media.
  • An asset with no main media is skipped, and logged.
  • A media file that fails to download is skipped, and logged with the error.

Assets are processed in small batches (10 by default) because each one is a file download.


Configurable Products (Akeneo Product Models)

Akeneo product models become UnoPim configurables bound to a variant structure — the object UnoPim 3.0 uses to describe a variant tree.


A migrated configurable product with its Variations panel in UnoPim

How the tree is built

An Akeneo family variant describes one or two variant_attribute_sets, each naming the axes that distinguish records at that depth. UnoPim expresses the same idea as a variant structure with level_1 / level_2 axes. The two line up one for one:

AkeneoUnoPim
Product model with no parentconfigurable, bound to the variant structure
Product model with a parent (sub-model)variant_group — the middle tier of a two-level tree
Product under a modelVariant, attached to the configurable or the variant group
Family variantVariant structure — its axes and attribute placements

Because the configurable points at a structure, it opens in UnoPim's variant editor. A configurable that only carried axes in the legacy pivot falls back to the pre-structure editor instead.

Rules the importer follows

  • One structure per family variant. Configurables migrated from the same Akeneo family variant share a structure rather than getting one each.
  • Structures with products are never rewritten. If a structure already has products hanging off it, its levels and axes are left exactly as they are, and the run log says so.
  • Unusable axes are dropped, and logged. An Akeneo axis that UnoPim will not accept as a variant axis is skipped. If a family variant ends up with no usable axis, no structure is created and the configurable falls back to carrying its axes in the legacy pivot — so it still renders, just in the older editor.
  • Flattened sub-models still work. If a structure came out one level deep, a sub-model is mapped onto its root and remembered there, so the variants underneath still find a parent.
  • Out-of-order pages are handled. Akeneo pages product models in no particular order. If a sub-model is read before its root, the root is fetched and imported on the spot rather than dropping the whole branch.
  • Re-running repairs. The structure link and the axis pivot are rewritten on every run, so a tree migrated before this mapping existed is fixed by importing it again — no need to delete anything first.

TIP

For configurables that were migrated before variant structures existed, php artisan akeneo-migration:backfill-variant-structures builds structures from what is already in the database. See Artisan Commands.


Products

Akeneo products become UnoPim products — simple ones on their own, and variants attached to the configurable or variant group they belong to.

Values and scope

Akeneo's locale and scope on each value map directly onto UnoPim's value buckets:

Akeneo value hasStored in UnoPim as
neither locale nor scopecommon
locale onlylocale_specific
scope onlychannel_specific
bothchannel_locale_specific

Value conversion

TypeHow it is stored
PriceA map of currency → amount.
SelectThe matching UnoPim option code (matched case-insensitively). An option with no match is left unresolved and logged.
MultiselectA comma-separated list of resolved option codes.
BooleanA true/false value.
DateA calendar date (YYYY-MM-DD) — the time part of an Akeneo timestamp is dropped, which is what UnoPim's date attributes and the search index expect.
Metric / measurementWhen the UnoPim attribute is a measurement attribute, the amount and its unit are kept as a measurement value. Otherwise only the amount is stored.
Asset collectionThe matching DAM asset IDs, resolved through the recorded asset mappings.
Image / file / galleryDownloaded from Akeneo and stored in UnoPim's public media storage.

Associations

Akeneo product associations are carried across onto UnoPim's product relations:

Akeneo association typeUnoPim relation
UPSELL, UP_SELL, UP_SELLSUp-sells
CROSS_SELL, CROSSSELL, X_SELLCross-sells
anything elseRelated products

Both associated products and associated product models are included. If a mapping for the Akeneo association type has been recorded, that mapping wins over the naming rule above.

Categories

A product's Akeneo categories are applied by code, so the product lands in the same places in the tree it occupied in Akeneo.

Skipped rows

Log messageWhat it means
skipped row N: missing identifierThe Akeneo record has no identifier.
'SKU' skipped: family not foundThe product's family has not been imported yet — run Attribute Families first.
option 'X' has no match in attribute 'Y'The option code does not exist in UnoPim. Re-run Attributes to sync its options.
media 'X' download failedThe media file could not be fetched from Akeneo.

Mappings

Every record imported is recorded as a mapping of the Akeneo code to the UnoPim record it became. Those mappings are what let the plugin resolve relationships on later runs — a product's family, its categories, its DAM assets, its association types.

This is why you can migrate in stages: import structure today and products next week, and the products will still find everything they point at.


Next Steps

Released under the MIT License.