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

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

將雄辯的模型包裝到另一個類會導(dǎo)致嵌套過多

將雄辯的模型包裝到另一個類會導(dǎo)致嵌套過多

PHP
元芳怎么了 2022-12-30 17:03:04
我正在使用 Laravel 5.5。我寫了一個包裝器,它采用 Eloquent 模型并將其包裝到一個Entity類中,每個模型都有自己的包裝器。假設(shè),用戶有很多產(chǎn)品,一個產(chǎn)品屬于一個用戶。包裝時,我需要獲取用戶的產(chǎn)品并將它們傳遞給產(chǎn)品包裝器以將它們包裝到產(chǎn)品實體中。在產(chǎn)品包裝器中,我需要讓該產(chǎn)品的用戶所有者將其包裝到用戶實體。所以,再次,在用戶包裝器中,我需要用戶產(chǎn)品!,這會創(chuàng)建一個無限循環(huán)。實體包裝器:abstract class EntityWrapper{    protected $collection;    protected $entityClass;    public $entity;    public function __construct($collection)    {        $this->collection = $collection;        $this->entity = $this->buildEntity();    }    protected function buildEntity()    {        $tempEntity = new $this->entityClass;        $Entities = collect([]);        foreach ($this->collection as $model) {            $Entities->push($this->makeEntity($tempEntity, $model));        }        return $Entities;    }    abstract protected function makeEntity($entity, $model);}用戶實體包裝器:class UserEntityWrapper extends EntityWrapper{    protected $entityClass = UserEntity::class;    protected function makeEntity($userEntity, $model)    {        $userEntity->setId($model->user_id);        $userEntity->setName($model->name);        // set other properties of user entity...        //--------------- relations -----------------        $userEntity->setProducts((new ProductEntityWrapper($model->products))->entity);        return $userEntity;    }}產(chǎn)品實體包裝器:class ProductEntityWrapper extends EntityWrapper{    protected $entityClass = ProductEntity::class;    protected function makeEntity($productEntity, $model)    {        $productEntity->setId($model->product_id);        $productEntity->setName($model->name);        // set other properties of product entity...        //--------------- relations -----------------        $productEntity->setUser((new UserEntityWrapper($model->user))->entity);        return $productEntity;    }}
查看完整描述

1 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊

最后我找到了解決方案。在每個包裝類中,我使用動態(tài)屬性來獲取關(guān)系集合,除了強(qiáng)加額外的查詢外,這會導(dǎo)致延遲加載。因此,在將模型集合傳遞給每個包裝器之前,檢索必要的關(guān)系模型,每個包裝器首先使用方法getRelations()(返回可用關(guān)系數(shù)組)檢查關(guān)系是否存在。如果預(yù)期關(guān)系可用,則將關(guān)系模型集合傳遞到適當(dāng)?shù)陌b類中。


用戶實體包裝器:


class UserEntityWrapper extends EntityWrapper

{

    protected $entityClass = UserEntity::class;


    protected function makeEntity($userEntity, $model)

    {

        $userEntity->setId($model->user_id);

        $userEntity->setName($model->name);


        // set other properties of user entity...


        //--------------- relations -----------------

        $relations = $model->getRelations();


        $products = $relations['products'] ?? null;

        if ($products) {

            $userEntity->setProducts((new ProductEntityWrapper($products))->entity);

        }


        return $userEntity;

    }

}

并且,類似的功能用于其他包裝器。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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