1414use craft \commerce \Plugin as CommercePlugin ;
1515use craft \elements \Asset ;
1616use craft \elements \db \AssetQuery ;
17+ use craft \elements \db \ElementQuery ;
1718use craft \elements \db \EntryQuery ;
1819use craft \elements \Entry ;
1920use craft \errors \ElementNotFoundException ;
2021use craft \fields \Assets as AssetsField ;
22+ use craft \fields \BaseRelationField ;
2123use craft \fields \Entries ;
2224use craft \fields \Lightswitch ;
2325use craft \fields \Money as MoneyField ;
@@ -657,8 +659,23 @@ static function (array $inventory) use ($defaultValue): array {
657659 */
658660 private function normalizeValue (mixed $ value ): mixed
659661 {
660- if (is_bool ($ value )) {
661- return $ value ? '1 ' : '0 ' ;
662+ if ($ value instanceof EntryQuery) {
663+ $ value = collect ($ value ->all ())
664+ ->map (static fn ($ element ) => "{$ element ->section ->handle }: {$ element ->slug }" )
665+ ->join (', ' );
666+ } elseif ($ value instanceof AssetQuery) {
667+ $ value = collect ($ value ->all ())
668+ ->map (static fn ($ asset ) => "{$ asset ->volume ->handle }: {$ asset ->path }" )
669+ ->join (', ' );
670+ } elseif ($ value instanceof ElementQuery) {
671+ $ value = collect ($ value ->all ())
672+ ->map (static fn ($ element ) => $ element ->slug )
673+ ->join (', ' );
674+ } elseif ($ value instanceof Money) {
675+ $ formatter = new DecimalMoneyFormatter (new ISOCurrencies ());
676+ $ value = $ formatter ->format ($ value );
677+ } elseif (is_bool ($ value )) {
678+ $ value = $ value ? '1 ' : '0 ' ;
662679 }
663680
664681 return $ value ;
@@ -925,6 +942,17 @@ private function setFieldValue(Element $element, string $fieldHandle, mixed $val
925942 ->all ();
926943
927944 $ element ->setFieldValue ($ fieldHandle , $ assetIds );
945+ } elseif ($ field instanceof BaseRelationField) {
946+ /** @var class-string<BaseRelationField> $fieldType */
947+ $ fieldType = get_class ($ field );
948+ /** @var class-string<Element> $elementType */
949+ $ elementType = $ fieldType ::elementType ();
950+
951+ $ slugs = explode (', ' , $ value );
952+ $ elementIds = collect ($ elementType ::find ()->slug ($ slugs )->all ())
953+ ->map (static fn ($ e ) => $ e ->id )
954+ ->toArray ();
955+ $ element ->setFieldValue ($ fieldHandle , $ elementIds );
928956 } elseif ($ field instanceof Lightswitch) {
929957 $ element ->setFieldValue ($ fieldHandle , $ value === '1 ' );
930958 } else {
@@ -943,20 +971,7 @@ private function normalizeProductExport(Product $product, array $mapping): array
943971 $ row [] = $ product ->slug ;
944972 } else {
945973 $ value = $ product ->getFieldValue ($ fieldHandle );
946- if ($ value instanceof EntryQuery) {
947- $ value = collect ($ value ->all ())
948- ->map (static fn ($ element ) => "{$ element ->section ->handle }: {$ element ->slug }" )
949- ->join (', ' );
950- } elseif ($ value instanceof AssetQuery) {
951- $ value = collect ($ value ->all ())
952- ->map (static fn ($ asset ) => "{$ asset ->volume ->handle }: {$ asset ->path }" )
953- ->join (', ' );
954- } elseif ($ value instanceof Money) {
955- $ formatter = new DecimalMoneyFormatter (new ISOCurrencies ());
956- $ value = $ formatter ->format ($ value );
957- } else {
958- $ value = $ this ->normalizeValue ($ value );
959- }
974+ $ value = $ this ->normalizeValue ($ value );
960975
961976 $ row [] = $ value ;
962977 }
0 commit comments