Laravel一对多关联中wherePivot的使用方法咨询
关于一对多关联中
wherePivot的使用说明 首先得澄清一个关键点:wherePivot是专门给多对多关联设计的,用来过滤中间表的字段,而你的Order和Status是一对多关联(一个状态对应多个订单,一个订单对应一个状态),这种关联模式下没有中间表,所以根本用不上wherePivot,直接用普通的where方法就可以啦。
看你的表结构,statuses表用table字段区分是订单状态还是工单状态,所以在Order模型的status关联里,只需要添加条件筛选出属于订单的状态就行,具体代码如下:
public function status() { return $this->belongsTo(Status::class) ->where('table', 'orders'); // 直接用where过滤statuses表的table字段 }
如果还需要额外的筛选条件(比如指定语言ID),也可以直接追加where:
public function status() { // 假设你需要根据当前用户语言筛选,这里只是示例 $langId = auth()->check() ? auth()->user()->language_id : 1; return $this->belongsTo(Status::class) ->where('table', 'orders') ->where('language_id', $langId); }
再啰嗦一句:只有当两个模型是多对多关系,并且存在中间表(比如order_status)时,你才需要用wherePivot去过滤中间表的字段。你的场景是标准的一对多,直接用where就完全能满足需求啦。
内容的提问来源于stack exchange,提问作者ronrun
相关产品推荐
相关产品推荐

