Eloquent Laravel 从多个表中获取数据
Eloquent Laravel Fetch Data from multiple tables
我花了两天时间试图解决这个问题,但我不知道如何解决。
我有五张桌子
- 产品
- 类别
- Category_Product
- 订单
- Order_Product
从视图中,单击类别按钮我必须获取他订购的所有具有相关类别的产品。
我有当前型号:
产品型号
class Product extends Model
{
public function categories() {
return $this->belongsToMany('App\Category');
}
public function orders() {
return $this->belongsTo('App\Order');
}
}
类别模型
public function products() {
return $this->belongsToMany('App\Product');
}
订购型号
public function products() {
return $this->belongsToMany('App\Product');
}
现在的问题是我不知道如何从当前 tables.When 中获取数据 我按下一个按钮 我可以从 Product
[=63] 中获取类别=],但我想从 Ordered_Products
中获取。实在想不通。
这样我就可以从产品中获取所有类别
if (request()->category) {
$products = Product::with('categories')->whereHas('categories', function ($query) {
$query->where('slug', request()->category);
})->get();
}
有了这个,我就可以获取订购的产品了。
$products = DB::table('order_product')
->join('products', 'order_product.product_id','=', 'products.id')
->where('order_product.user_id','=',$user_id)
->get();
对于后者,肯定有更好的方法。如果这是一个愚蠢的问题,我很抱歉,但我对这个框架还很陌生。我正在使用 Laravel 7.2.
基本上 Eloquent 模型不鼓励加入 table 来检索数据。它应该仅用于过滤结果(因此您需要使用 ->select('original_table.*')
删除其他 table 的字段)
在这种情况下,您应该首先简单地检索 categories
。然后使用关系属性访问检索相关数据。
例如
$categories = Category::query()
->with('products')
->where('slug', request('category'))
->get();
$products = $categories->flatMap->products;
$pivots = $products->map->pivot;
使用 whereHas 两次解决:
$products = Product::with('categories')->whereHas('categories',function($query){
$query->where('slug',request()->category);
})->whereHas('orders',function($query){
$query->where('orders.user_id',Auth::id());
})->get();
我花了两天时间试图解决这个问题,但我不知道如何解决。
我有五张桌子
- 产品
- 类别
- Category_Product
- 订单
- Order_Product
从视图中,单击类别按钮我必须获取他订购的所有具有相关类别的产品。
我有当前型号:
产品型号
class Product extends Model
{
public function categories() {
return $this->belongsToMany('App\Category');
}
public function orders() {
return $this->belongsTo('App\Order');
}
}
类别模型
public function products() {
return $this->belongsToMany('App\Product');
}
订购型号
public function products() {
return $this->belongsToMany('App\Product');
}
现在的问题是我不知道如何从当前 tables.When 中获取数据 我按下一个按钮 我可以从 Product
[=63] 中获取类别=],但我想从 Ordered_Products
中获取。实在想不通。
这样我就可以从产品中获取所有类别
if (request()->category) {
$products = Product::with('categories')->whereHas('categories', function ($query) {
$query->where('slug', request()->category);
})->get();
}
有了这个,我就可以获取订购的产品了。
$products = DB::table('order_product')
->join('products', 'order_product.product_id','=', 'products.id')
->where('order_product.user_id','=',$user_id)
->get();
对于后者,肯定有更好的方法。如果这是一个愚蠢的问题,我很抱歉,但我对这个框架还很陌生。我正在使用 Laravel 7.2.
基本上 Eloquent 模型不鼓励加入 table 来检索数据。它应该仅用于过滤结果(因此您需要使用 ->select('original_table.*')
删除其他 table 的字段)
在这种情况下,您应该首先简单地检索 categories
。然后使用关系属性访问检索相关数据。
例如
$categories = Category::query()
->with('products')
->where('slug', request('category'))
->get();
$products = $categories->flatMap->products;
$pivots = $products->map->pivot;
使用 whereHas 两次解决:
$products = Product::with('categories')->whereHas('categories',function($query){
$query->where('slug',request()->category);
})->whereHas('orders',function($query){
$query->where('orders.user_id',Auth::id());
})->get();