duanchi0883649 2017-11-01 04:07
浏览 465
已采纳

Laravel中的Eloquent查询速度很慢

I'm doing an application in Laravel 5.3.19, the thing is, I'm doing a query with Eloquent but it is SO slow, I read some forums and seems like I'm doing something wrong, I tried doing this query in the console with the command php artisan tinker and the query work perfectly, the problem is when I log into the URL that I created in the routes/web.php from my browser, the page just load indefinitely and sometimes It gives to me a timeout error. Someone knows what could be the problem?

here are my files:

  • routes/web.php

Route::get('/area_products/listProductsByArea/{area}','AreaProductController@orderProductsListByArea');    
  • Http/controllers/AreaProductController.php (Controller)
public function orderProductsListByArea($area){
    $array_products = [];
    $products = AreaProduct::where('area_id', $area)->get();
    foreach ($products as $data) {
        $product = [
            'id' => $data->id,
            'price' => $data->price,
            'product_id' => $data->product->id,
            'product_name' => $data->product->name,
            'product_category' => $data->product->category->name,
            'product_reference' => $data->product->reference,
            'product_code' => $data->product->code,
            'area_id' => $data->area_id
        ];
        array_push($array_products, $product);
    }
}    
  • Http/AreaProduct.php (Model)
namespace App;
use Illuminate\Database\Eloquent\Model;
class AreaProduct extends Model{
    public $table = "products_area";
    public function product(){
        return $this->belongsTo('App\Product');
    }
    public function area(){
        return $this->belongsTo('App\Area');
    }
}

Note: This query should return near to 700 results, I noticed the problem is produced when I'm doing the relations stuff like 'product_name' => $data->product->name. Am I doing something wrong?

Thanks for your help.

  • 写回答

1条回答 默认 最新

  • doubei2231 2017-11-01 04:45
    关注

    Since you're using Eloquent relationships can't you just do this:

    public function orderProductsListByArea($area){
        // Load the Area products with the 'product' relationship (eager loading)
        $products = AreaProduct::where('area_id', $area)
            ->with('product')
            ->get();
    
        // Return the list of products
        return $products;
    }
    

    Without seeing the rest of your data/db, I'm pretty sure that should return what you want.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog