2015-11-06 110 views
0

Laravel雄辯查詢生成器(使用查詢存在,使用whereHas)

PROFILE 
id address type approved fky_profile_vendor_id 

VENDOR 
id name 

PRODUCT 
id name price instock fky_prod_vendor_id 

關係

PROFILE <-(one-to-one)-> VENDOR <- (one-to-many) -> PRODUCT 

查詢

雄辯查詢來獲取所有產品的有庫存

PRODUCT::where('instock','>',0)->get(); 

如何獲得批准供應商的所有庫存產品?

由於

ķ

回答

0

應用\資料

use Illuminate\Database\Eloquent\Model; 

class Profile extends Model { 

    public function scopeApproved($query) 
    { 
     return $query->where('approved', 'y'); 
    } 

    public function vendor() 
    { 
     return $this->belongsTo('App\\Vendor'); 
    } 

} 

-

應用\賣方

use Illuminate\Database\Eloquent\Model; 

class Vendor extends Model { 

    public function profile() 
    { 
     return $this->hasOne('App\\Profile'); 
    } 

    public function products() 
    { 
     return $this->hasMany('App\\Product'); 
    } 

} 

-

應用程序\產品

use Illuminate\Database\Eloquent\Model; 

class Product extends Model { 

    public function vendor() 
    { 
     return $this->belongsTo('App\\Vendor'); 
    } 

} 

使用方法:

$vendors = Vendor::whereHas('profile', function ($q) { $q->approved(); })->with('products')->get(); 

$products = $vendors->map(function ($vendor) 
{ 
    return $vendor->products; 
}); 

這將返回ProductsCollection一個S的Vendor s的批准Profile

+0

我只需要具有批准的配置文件(批准='y')的供應商需要所有產品(庫> 0) – karmendra

+0

@karmendra檢查更新後的答案。 – Hkan

+0

感謝您的努力,但是這完全覆蓋了我,我要求您解釋'如何使用'部分,特別是' - > approved()'和' - > map'。 – karmendra