繁体   English   中英

在Laravel中防止模型中的模型过度消耗

[英]Prevent Eager Loads of a Model in relations in Laravel

问题:每当访问模型时,都会加载模型的急切负载(在$appends设置),如果通过另一个模型的关系的with()方法请求相同的模型,则也是如此。 我期望的是避免从关系查询时加载$appends属性。 请参阅下面的详细信息。

模型1

<?php

   Class Shop extends Eloquent{

     protected $appends = [];

     public function products(){

        return $this->hasMany(App\Product::class);

     }

   }

模型2(在$ appends中具有属性)

  <?php

   Class Product extends Eloquent{

     protected $appends = ['defaultVariant'];

     public function variants(){

        return $this->hasMany(App\Variant::class);

     }

     public function getDefaultVariantAttribute(){

     //do something to check default variant

     }

   }
  <?php

  Class Variant extends Eloquent{

     protected $appends = ['var1', 'var2', 'var3'];


  }
  <?php

  //imagine a query like below

     $shop = App\Shop::with('products')->find(2);

     dd($shop->products);

现在将为ID为2的$shop加载绑定到的产品,以及急需加载的产品模型的defaultVariant属性,这是需要避免的。 请提示。 谢谢。

如果要隐藏defaultVariant ,请使用hidden

 Class Product extends Eloquent{

     protected $appends = ['defaultVariant'];
     protected $hidden = ['defaultVariant'];

     public function variants(){
        return $this->hasMany(App\Variant::class);
     }

     public function getDefaultVariantAttribute(){    
     }
   }

或以编程方式

$this->hidden(['defaultVariant']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM