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:
Route::get('/area_products/listProductsByArea/{area}','AreaProductController@orderProductsListByArea');
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);
}
}
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.
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.