我有2个表(产品和位置),我需要从中获得所有产品的位置以及可以一次获得产品的位置。 产品表如下所示:
Product| Price | Product_id
Rice | 45.00 | 101
Beans| 30.00 | 102
“位置”表如下:
Product_id | location
101 | Chicago
101 | Paris
101 | Lagos
102 | London
102 | New York
我正在使用Laravel Eloquent模型来尝试解决此问题,但我不断获得同一产品的多行。
我想要得到的结果:
$result =
{
{"Rice",
45.00,
101,
location: {"Chicago", "Paris", "Lagos"}
},
{"Beans",
30.00,
102,
location: {"London", "New York"}
}
}
任何提供的帮助将不胜感激。
答案 0 :(得分:0)
您要在Laravel中检索模型。因此,首先创建您的产品和位置模型。
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
// if you have no standard table naming
protected $table = 'products';
public function products()
{
// you have to specify the foreign key is Product id as it does not follow the laravel standard
$this->hasMany(Location::class, 'Product_id');
}
}
class Location extends Model
{
// if you have no standard table naming
protected $table = 'locations';
public function product()
{
return $this->belongsTo(Product::class, 'Product_id');
}
}
这意味着您现在可以检索产品。加上位置即可使其达到最佳效果。
$products = Product::with('locations')->get();
现在,表绑定在一起的方式将在产品中具有多个位置。您可以像这样检索em。对于类似于您的结构。您的JSON完全无效。
$products = $products->map(function($product) {
$product->location = $product->locations->map(function($location){
return $location->location;
});
return $product;
})
您仍然可能希望将产品转换为漂亮的JSON响应,与考虑中的问题相比,目前看来这很合适。