【问题标题】:How can i make associations in Shopware 6?如何在 Shopware 6 中建立关联?
【发布时间】:2021-08-09 15:11:34
【问题描述】:

基本上我想要这个 SQL 返回的相同结果:

SELECT id FROM property_group_option opt
    LEFT JOIN property_group_option_translation tra 
        ON opt.id = tra.property_group_option_id
    WHERE opt.property_group_id = <id> AND tra.name = "<name>"

Shopware documentation 中描述的方法似乎没有得到正确的结果。我尝试了以下方法:

$criteria = (new Criteria())
        ->addFilter(new EqualsFilter('property_group_id', $propertyGroupId))
        ->getAssociation('property_group_option_translation')
            ->addFilter(new EqualsFilter('name', $value));

$result = $this->propertyGroupOptionRepository->search($criteria, Context::createDefaultContext())->first()->getId();

我确实找到了一个似乎不是可行的解决方法(也不是最好的表现),但它确实返回了正确的结果。

$criteria = (new Criteria());
$criteria->addFilter(new EqualsFilter('name', $value));
$criteria->getAssociation('property_group_option')
    ->addFilter(new EqualsFilter('groupId', $propertyGroupId));

$translation = $this->propertyGroupOptionTranslationRepository->search($criteria, Context::createDefaultContext())->first()

if($translation !== null) {
    $criteria = (new Criteria([$translation->get('propertyGroupOptionId')]));
    $result = $this->propertyGroupOptionRepository->search($criteria, Context::createDefaultContext())->first()->getId();
}

有没有合适的解决方案?

【问题讨论】:

    标签: php symfony shopware dbal


    【解决方案1】:

    您正在使用表名。尝试使用模型名称。

    【讨论】:

    • 你的意思是group.option.translation insteda of property_group_option_translation- 我认为这样更好,是的。幸运的是,结果执行的 SQL 似乎是相同的 :)
    【解决方案2】:

    您必须首先使用addAssociation() - getAssociation() 似乎返回一个新的Criteria 实例,如果之前不存在关联,则稍后不会在实际查询中使用该实例:

    in the code

    public function getAssociation(string $path): Criteria
    {
        $parts = explode('.', $path);
    
        $criteria = $this;
        foreach ($parts as $part) {
            if ($part === 'extensions') {
                continue;
            }
    
            if (!$criteria->hasAssociation($part)) {
                $criteria->associations[$part] = new Criteria(); // this is returned, but not stored
            }
    
            $criteria = $criteria->associations[$part];
        }
    
        return $criteria;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2021-01-12
      • 2020-01-18
      • 2022-01-02
      • 1970-01-01
      • 2023-03-05
      • 2021-01-11
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多