当前位置:  开发笔记 > 编程语言 > 正文

Laravel雄辩的模型如何从关系表中获取数据

如何解决《Laravel雄辩的模型如何从关系表中获取数据》经验,为你挑选了1个好方法。

我正在开发一个具有以下雄辩模型的laravel应用程序

产品hasMany('App/Sku','products_id')

Sku belongsTO('App/Product')

我有一个控制器'ProductController',其中提供以下代码

public function index()
{    
    $products = Product::all();
    foreach($products as $product){
            $products_id = $product->products_id;
    }
}

我正在公开RESTfull API,这将允许我的用户获得所有产品详细信息(包括skus,运输类型等).

假设我有一个API GET:/ products

获取所有产品详细信息的代码将是以下内容

public function index()
{              
      $products = Product::all();
      foreach($products as $product){
          $products_id = $product->products_id;
          $skus_data = Product::find($products_id)->skus;
      }
        // Now I have both the product details + skus which I can bundle into an array/json.
}

现在我的问题是,这个逻辑是否合适?在这种情况下,所有逻辑都在控制器中,因为我使用了雄辩的模型,我为每个表都有一个模型,并在其中定义了关系.有没有办法可以获得产品/相关模型的所有细节(产品详情(表1)+ Sku详细信息(表2))而不是使用下面的

foreach($products as $product){
    $products_id = $product->products_id;
    $skus_data = Product::find($products_id)->skus;
}

我对laravel开发和雄辩的模型都很陌生.我将使用存储库模式进行开发,在这种情况下,aboe逻辑(Product + Sku组合)所在的位置.

请帮忙.



1> Moppo..:

是的,您可以获取产品和skus的详细信息,而无需使用预先加载对每个产品进行一次额外查询 (这称为典型的N + 1查询问题,其中N是产品的数量)

假设您ProductSku模型模型之间的关系是:

产品

public function skus()
{
    return hasMany('App/Sku','products_id');
}

要获取产品数据以及sku数据,您可以使用该with方法.在你的控制器中:

调节器

 $products = Product::with('skus')->get();

然后,在您的视图中,您可以通过这种方式获取信息:

视图

foreach ($products as $product) 
{
     //$product->skus is a collection of Sku models
     dd( $product->skus );
}

对于存储库问题:如果要使用存储库,可以将代码的eloquent-access部分放在存储库中.因此,例如,您可以在存储库中使用此方法:

ProductRepository

public function getProductsData() 
{
    //access eloquent from the repository
    return Product::with('skus')->get();    
} 

那么您可以在控制器中使用您的存储库:

调节器

//inject the repository in the controller
public function __construct( ProductRepository $productRepo )
{
    $this->productRepo = $productRepo;
}

//use the injected repository to get the data
public function index()
{
    $products = this->productRepo->getProductsData();
}

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有