2015-11-06 62 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