#cakephp #associations #has-and-belongs-to-many
Вопрос:
В настоящее время я работаю над приложением cake. Я хочу собирать данные о продукте с внешнего ресурса и экспортировать их в разные файлы или стили для разных целей. Например, мне нужно создать список моих товаров, чтобы импортировать их в интернет-магазин.
У меня есть таблица products
, которая имеет множество, attributes
которая имеет множество attributetypes
. Это attributetypes
определяет технические особенности моего attributes
. Мое главное замечание здесь-это поле attributetypes.slug
, которое является уникальным полем, поэтому его можно использовать в качестве идентификатора.
В моей функции экспорта я хочу сделать что-то вроде этого:
foreach ($poducts as $product) {
$export_array = [
...
'width' => $product->attributes['slug-width']->value,
..
];
}
Откуда slug-widht
взялся этот слизняк Attributes.Attributetypes.slug
в настоящее время я работаю с отдельными циклами foreach, но мне интересно, есть ли встроенные механизмы для того, чего я планирую достичь, или я мог бы создать такой механизм в своей модели или где-то еще?
Я бы предпочел решение, подобное .. ->find('list', ...
тому, в котором я могу определить поля ключей и значений — в этом примере мне понадобятся все Products.Attributes
доступные объекты Products.Attributes.Attributetypes.slug
.
заранее спасибо
*редактировать, как упоминал @ndm, похоже, что мой вопрос довольно абстрактен. Так что я показываю, на что я способен:
Когда я позвоню
$products = $this->Products->find('All', [
'contain' => [
'Attributes.Attributestypes',
...
]
);
мои продукты выглядят примерно так:
object(AppModelEntityProduct)#330 (22) {
["id"] => int(1)
["article_number"] => string(6) "100575"
...
["attributes"]=> array(8) {
[0]=> object(AppModelEntityAttribute)#244 (16) {
["id"]=> int(1)
["attributetype_id"]=> int(1)
["product_id"]=> int(1)
["value"]=> string(1) "0"
...
["attributetype"]=> object(AppModelEntityAttributetype)#243 (15) {
["id"]=> int(1)
["slug"]=> string(6) "weight"
["datatype"]=> string(5) "float"
["name"]=> string(7) "Gewicht"
...
}
...
}
[1]=> object(AppModelEntityAttribute)#238 (16) {
["id"]=> int(2)
["attributetype_id"]=> int(2)
["product_id"]=> int(1)
["value"]=> string(1) "0"
...
["attributetype"]=> object(AppModelEntityAttributetype)#234 (15) {
["id"]=> int(2)
["slug"]=> string(6) "length"
["datatype"]=> string(5) "float"
["name"]=> string(6) "Länge"
...
}
...
}
...
}
...
}
Но было бы здорово, если бы это выглядело так:
object(AppModelEntityProduct)#330 (22) {
["id"] => int(1)
["article_number"] => string(6) "100575"
...
["attributes"]=> array(8) {
["**weight**"]=> object(AppModelEntityAttribute)#244 (16) {
["id"]=> int(1)
["attributetype_id"]=> int(1)
["product_id"]=> int(1)
["value"]=> string(1) "0"
...
["attributetype"]=> object(AppModelEntityAttributetype)#243 (15) {
["id"]=> int(1)
["slug"]=> string(6) "**weight**"
["datatype"]=> string(5) "float"
["name"]=> string(7) "Gewicht"
...
}
...
}
["**length**"]=> object(AppModelEntityAttribute)#238 (16) {
["id"]=> int(2)
["attributetype_id"]=> int(2)
["product_id"]=> int(1)
["value"]=> string(1) "0"
...
["attributetype"]=> object(AppModelEntityAttributetype)#234 (15) {
["id"]=> int(2)
["slug"]=> string(6) "**length**"
["datatype"]=> string(5) "float"
["name"]=> string(6) "Länge"
...
}
...
}
...
}
...
}
Я надеюсь, что это немного прояснит ситуацию
Комментарии:
1. Все это довольно абстрактно, мне трудно разобраться в структуре только с этой информацией об ассоциации. Вы можете получить лучшую помощь, если покажете дамп результирующего набора, как он есть сейчас, и полный пример того, как должен выглядеть преобразованный набор данных для этого дампа.