【发布时间】:2018-09-26 13:27:21
【问题描述】:
我的表结构如下:
产品
- 身份证
product_formats
- 身份证
- product_id
product_prices
- 身份证
- product_format_id
- market_id
市场
- 身份证
一种产品可以有多种格式,每种格式都有自己的价格,属于不同的市场。如何从 Product 模型中检索市场列表?
我以前只有一个数据透视表,但现在我有两个数据透视表。
class Product extends Model
{
public function markets()
{
return $this->belongsToMany(Market::class);
}
}
更新
为了得到我想要的结果,我做了以下事情:
public function markets()
{
return Market::whereIn('id', $this->prices()->distinct()->pluck('market_id')->toArray());
}
但是,我想知道是否有办法通过关系来实现这一点。
【问题讨论】:
-
简单。只需在
products和product_formats之间建立one to many关系,在product_formats和markets之间建立many to many关系 -
然后,如果您想从一个产品中检索市场列表,只需执行
$product->product_format[0]->markets。我说format[0]是因为一对多的关系 -
@LuisfelipeDejesusMunoz 那不是只检索我的第一种格式的市场吗?我想要每种格式的所有独特市场。
-
这取决于您查询数据的方式。如果您想要单一产品的所有独特市场,您可以执行
markets->whereHas("product_formats.products", function($query){$query->where("id", myProductId);})->get()之类的操作