Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel雄辩的查询生成器(使用查询存在,使用whereHas)_Laravel_Eloquent_Query Builder - Fatal编程技术网

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
我怎样才能得到一个核准供应商的所有库存产品

谢谢


K

App\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;
});