Laravel 8中带动态参数的wherePivot()使用疑问及调用方法
多对多关联传递动态参数使用wherePivot的解决方案
你的写法是可行的,不过需要注意方法命名的合理性——当前方法名customer是单数,但实际返回的是BelongsToMany关联实例(支持集合操作),建议改成customersByCustomerId这类更清晰的名称,避免误解。
调用方式
假设你的模型是Event,先获取模型实例后直接调用该方法并传入customer_id即可:
// 获取指定Event实例 $event = Event::find(1); // 获取匹配customer_id的单个关联记录 $targetCustomer = $event->customer(5)->first(); // 或者获取匹配的记录集合 $targetCustomers = $event->customer(5)->get();
更灵活的替代写法
如果希望关联方法具备复用性(同时支持筛选和不筛选的场景),可以先定义基础关联,再在调用时动态追加wherePivot条件:
// 基础多对多关联定义 public function customers() { return $this->belongsToMany(Customer::class, 'event_customers', 'event_id', 'customer_id'); } // 调用时动态筛选指定customer_id的关联数据 $event = Event::find(1); $targetCustomer = $event->customers()->wherePivot('customer_id', 5)->first();
这种写法的优势在于,基础的customers关联可以直接用于获取该Event的所有关联客户,需要筛选时再通过链式调用追加条件,适用性更广。
内容的提问来源于stack exchange,提问作者Čamo
相关产品推荐
相关产品推荐

