第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何映射產(chǎn)品實體以使其由 Doctrine 管理?

如何映射產(chǎn)品實體以使其由 Doctrine 管理?

PHP
湖上湖 2022-06-17 17:03:29
我正在嘗試在 PS 1.7.6.1 下構(gòu)建一個模塊。在設(shè)計中,我在產(chǎn)品和預(yù)購之間存在多對一關(guān)系(許多預(yù)購可以與一個產(chǎn)品相關(guān)聯(lián))。Preorder 對象是一個 ORM 實體://mymodule/src/Entityclass Preorder{    /**     * @var int     *     * @ORM\Id     * @ORM\Column(name="id_preorder", type="integer")     * @ORM\GeneratedValue(strategy="AUTO")     */    private $id;    /**     * @var int     *     * @ORM\Column(name="id_product", type="integer")     */    private $productId;    /**     * @var string     *     * @ORM\Column(name="email", type="string", length=64)     */    private $email;    setter and getter}在控制器中://src/mymodule/src/Controlleruse Doctrine\DBAL\Types\TextType;use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;use Doctrine\ORM\EntityManagerInterface;use MyModule\Entity\Preoder;use Symfony\Bridge\Doctrine\Form\Type\EntityType;use Symfony\Component\Form\Extension\Core\Type\EmailType;use Symfony\Component\HttpFoundation\Request;use Product;class PreorderController extends FrameworkBundleAdminController{public function createAction(Request $request){        $preorder = new Preorder();        $preorderForm = $this->createFormBuilder($preorder)                ->add('email', EmailType::class)                ->add('productId', EntityType::class, [                    'class' => Product::class,                ])                ->getForm();        $bookingForm->handleRequest($request);// validate and persist}}問題是表單構(gòu)建器無法識別 Product 實體。它拋出一個運行時異常:“產(chǎn)品”類似乎不是托管的 Doctrine 實體。你忘了映射它嗎?我在核心文件中找不到處理這種情況的示例。非常感謝您提前指導(dǎo)/幫助我解決此問題。
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經(jīng)驗 獲得超7個贊

主要問題是它product_id不是一個實體,所以formbuilder用EntityType::class. 您需要正確定義(如文檔中所述)您與對象的 ManyToOne 關(guān)系


在產(chǎn)品方面:


/**

 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")

 */

class Product

{

    // usual stuff


    /**

     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="product", cascade={"persist"})

     */

    private $preorders;

}

在預(yù)訂方面:


/**

 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")

 */

class Product

{

    // usual stuff


    /**

     * @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="preorders")

     */

    private $product;

}

在您的 formBuilder 中,product將由entityEntityType::class


編輯

如果您product是 ORM 未映射的遺留類,那么您可以使用dataTransformer幫助您的 formBuilder 識別遺留實體。


namespace App\DataTransformer;


class ProductToIdTransformer implements DataTransformerInterface

{

    public function transform($product)

    {

        if (null === $product) {

            return '';

        }


        return $product->getId();

    }


    public function reverseTransform($product_id)

    {

        if (!$product_id){

            return;

        } 


        //your db logic to retrieve the product


        if (null === $field){

            throw new TransformationFailedException(sprintf("the product '%s' does not exist!", $product_id));

        }


        return $product;


    }

}

然后在您的表單構(gòu)建器中,您將使用 aCollectionType代替:


$preorderForm = $this->createFormBuilder($preorder)

    ->add('email', EmailType::class)

    ->add('product', CollectionType::class, [

        'class' => Product::class,

        //some logic to adapt the different choices to your needs

    ])

;


$preorderForm

    ->get('product')

    ->addModelTransformer(ProductToIdTransformer::class)

;


$preorderForm = $preorderForm->getForm();


查看完整回答
反對 回復(fù) 2022-06-17
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號