Я делаю приложение в Laravel 5.3.19, дело в том, что я делаю запрос с Eloquent, но он настолько медленный, я читаю некоторые форумы и мне кажется, что я делаю что-то не так, я пытался сделать этот запрос в консоль с командой php artisan tinker
и запрос работает отлично, проблема заключается в том, когда я вхожу в URL, который я создал в routes/web.php
из моего браузера страница просто загружается на неопределенный срок, и иногда она выдает ошибку тайм-аута. Кто-то знает в чем может быть проблема?
вот мои файлы:
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');
}
}
Примечание: этот запрос должен вернуть около 700 результатов, я заметил, что проблема возникает, когда я делаю такие отношения, как 'product_name' => $data->product->name
, Я делаю что-то неправильно?
Спасибо за вашу помощь.
Поскольку вы используете отношения Eloquent, вы не можете просто сделать это:
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;
}
Не видя остальных ваших данных / БД, я почти уверен, что должен вернуть то, что вы хотите.
Попробуй это:
Area.php (модель)
// Assuming table products has foreign key from table areas
public function product()
{
return $this->hasMany('App\Product');
}
AreaProductController.php (Контроллер)
$myarea = Area::find($id);
$products_per_area = $myarea->product;
return view('', compact('products_per_area'));