Laravel雄辩的查询生成器(使用查询存在,使用whereHas)
表格Laravel雄辩的查询生成器(使用查询存在,使用whereHas),laravel,eloquent,query-builder,Laravel,Eloquent,Query Builder,表格 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 我怎样才能得到一个核准供应商的所有库存产品
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
我怎样才能得到一个核准供应商的所有库存产品
谢谢
KApp\Profile
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');
}
}
--
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');
}
}
--
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;
});
这将返回一个
集合
的产品
s的供应商
s和已批准的配置文件
我需要所有产品(instock>0)只供已批准配置文件的供应商使用(已批准的是),谢谢您的努力,但这完全超出了我的理解范围,我请您再解释一下“如何使用”部分,尤其是->approved()
和->map
->->approved
方法是概要文件中的范围已批准的
,它基本上只是->where('approved','y')
的别名map
只是一种流畅的方法,可以遍历每个$vendors
数组(集合
实际上)。它基本上与foreach($vendors作为$vendor)相同
整个代码的作用是,它获取所有vendor
s,第一行有一个批准的配置文件。并遍历每个供应商,将其产品添加到第二行和其他行的$products
数组中。此外,要使用instock>0获取产品
s,您需要将$vendor->products
更改为$vendor->products->filter(函数($Product){return$Product->instock>0;})
$vendors = Vendor::whereHas('profile', function ($q) { $q->approved(); })->with('products')->get();
$products = $vendors->map(function ($vendor)
{
return $vendor->products;
});