鍍金池/ 問(wèn)答/PHP/ laravel 多對(duì)多關(guān)系怎么通過(guò)中間表字段與模型的字段對(duì)比進(jìn)行篩選?

laravel 多對(duì)多關(guān)系怎么通過(guò)中間表字段與模型的字段對(duì)比進(jìn)行篩選?

比如:用戶收藏商品

三個(gè)表的字段:
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')
}

怎么找到當(dāng)前登陸用戶收藏的,當(dāng)前價(jià)格比期待價(jià)格低的商品?

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

回答
編輯回答
柒槿年

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

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