鍍金池/ 問答/PHP/ laravel 多對多關系怎么通過中間表字段與模型的字段對比進行篩選?

laravel 多對多關系怎么通過中間表字段與模型的字段對比進行篩選?

比如:用戶收藏商品

三個表的字段:
User: id
Product: id, current_price
product_user: id, user_id, product_id, expected_price

App\User

public function products(){
    return $this->belongsToMany('App\Product')->withPivot('expected_price')
}

怎么找到當前登陸用戶收藏的,當前價格比期待價格低的商品?

目前我自己想到的就是先找出用戶收藏的所有商品,然后用foreach一個一個的和對應的expected_price進行對比,有沒有l(wèi)aravel自帶的更優(yōu)雅的方法?

回答
編輯回答
柒槿年

你可以看看他最終執(zhí)行的sql,發(fā)現(xiàn)其實只要加個額外的where條件即可,再去翻下源碼看看是否有比較中間表和關聯(lián)表的方法,翻到個wherePivot, 但是他是比較中間表字段和某個具體值的,我們要比較的是兩個表的字段,那怎么辦呢?直接用DB::raw吧~

public function expectProducts()
{
    return $this->belongsToMany('App\Product')->wherePivot('expected_price', '>=', DB::raw('current_price'));
}
2018年5月19日 23:17