예를 통한 Shopware 데이터 연결
17738 단어 ecommercedatabaseassociationshopware
이 블로그 게시물에서는 엔터티에 연결을 추가하는 방법에 대한 간단한 예를 설명합니다.
1-1
일대일 연결은 매우 기본적인 데이터베이스 연결 유형입니다. 예를 들어
User
테이블은 하나의 Media
테이블과 연결될 수 있습니다. 이 연결을 정의하기 위해 OneToOneAssociationField
및 UserDefinition
에 MediaDefinition
를 배치합니다.두 엔터티 정의의
defineFields
메서드를 살펴보겠습니다.// class UserDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new FkField('avatar_id', 'avatarId', MediaDefinition::class)),
(new OneToOneAssociationField('avatarMedia', 'avatar_id', 'id', MediaDefinition::class)),
]);
}
// class MediaDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new OneToOneAssociationField('avatarUser', 'id', 'avatar_id', UserDefinition::class, false))->addFlags(new CascadeDelete()),
]);
}
일대다
일대다 연관은 단일 테이블이 하나 이상의 하위 테이블에 대한 상위인 연관을 정의하는 데 사용됩니다. 예를 들어,
Product
는 Price
의 무한 수를 가질 수 있습니다.이제 다음 예를 살펴보겠습니다.
// class ProductDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new OneToManyAssociationField('prices', ProductPriceDefinition::class, 'product_id'))->addFlags(new CascadeDelete(), new Inherited()),
]);
}
// class PriceDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new FkField('product_id', 'productId', ProductDefinition::class))->addFlags(new Required()),
(new ManyToOneAssociationField('product', 'product_id', ProductDefinition::class, 'id', false))->addFlags(new ReverseInherited('prices')),
]);
}
다대다
Shopware는 다대다 연결 작업을 보다 편리하게 수행할 수 있는 방법도 제공합니다. 예를 들어,
Product
가 Category
를 많이 가질 수 있고 Category
가 Product
를 많이 가질 수 있다고 상상해 봅시다.이 연결을 사용하려면 세 번째 엔터티를 사용할 수 있어야 합니다.
ProductCategoryDefinition
라고 하며 두 정의를 연결하는 역할을 합니다. 자체 데이터베이스 테이블도 필요합니다product_category
.// class ProductDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new VersionField())->addFlags(new ApiAware()),
(new ManyToManyAssociationField('categories', CategoryDefinition::class, ProductCategoryDefinition::class, 'product_id', 'category_id'))->addFlags(new ApiAware(), new CascadeDelete(), new Inherited(), new SearchRanking(SearchRanking::ASSOCIATION_SEARCH_RANKING)),
]);
}
// class CategoryDefinition extends EntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new IdField('id', 'id'))->addFlags(new PrimaryKey(), new Required()),
(new VersionField())->addFlags(new ApiAware()),
(new ManyToManyAssociationField('products', ProductDefinition::class, ProductCategoryDefinition::class, 'category_id', 'product_id'))->addFlags(new CascadeDelete(), new ReverseInherited('categories')),
]);
}
// class ProductCategoryDefinition extends MappingEntityDefinition
protected function defineFields(): FieldCollection
{
return new FieldCollection([
(new FkField('product_id', 'productId', ProductDefinition::class))->addFlags(new PrimaryKey(), new Required()),
(new ReferenceVersionField(ProductDefinition::class))->addFlags(new PrimaryKey(), new Required()),
(new FkField('category_id', 'categoryId', CategoryDefinition::class))->addFlags(new PrimaryKey(), new Required()),
(new ReferenceVersionField(CategoryDefinition::class))->addFlags(new PrimaryKey(), new Required()),
(new ManyToOneAssociationField('product', 'product_id', ProductDefinition::class, 'id', false)),
(new ManyToOneAssociationField('category', 'category_id', CategoryDefinition::class, 'id', false)),
]);
}
이 기사에 대한 피드백을 받게 되어 정말 기쁩니다. 소중한 시간을 내어 읽어주셔서 감사합니다.
출처: https://viennt.me/shopware-data-associations-by-examples
Reference
이 문제에 관하여(예를 통한 Shopware 데이터 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/viennt/shopware-data-associations-by-examples-4ae3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)