如何从每个类别中获取 2 个产品

时间:2021-04-25 06:03:15

标签: php database laravel

我想从每个类别中提取 2 个产品。

Product.php

class Product extends Model
{ 
   protected $table = 'products';
}

类别.php

class Category extends Model {
    protected $table = 'categories';
}

控制器

public function index() {
    $products = Product::all();
    return Product::latest()->take(5)->get();
}

3 个答案:

答案 0 :(得分:1)

这应该获取每个类别的前两个产品:

// Get all categories
$categories = Category::all();

//Create an empty array to store our product IDs
$prodIds = array();

// Extract the first 2 product IDs in each category
foreach ($categories as $category) {
    $prodIds[] = $category->products->take(2)->pluck('id');
}

// Fetch products from their IDs
$products = Product::findMany($prodIds);

编辑:我上面的回答应该有效,如果该类别没有至少两个产品,它将失败。要解决此问题,您需要从 $prodIds 中删除空值。

答案 1 :(得分:1)

Product.php

class Product extends Model
{ 
   protected $table = 'products';

  public function Category()
    {
        return $this->belongsTo(Product::class);
    }
}

注意:在类别模型中导入您的类别模型

类别.php

class Category extends Model {
    protected $table = 'categories';

    public function Product()
    {
        return $this->hasMany(Product::class);
    }
}

注意:在产品模型中导入您的类别模型

控制器

public function index() {
   
    return Category::with('Product'=>funcation($obj){
        return $obj->take(2);
    })->latest()->take(5)->get();
}

答案 2 :(得分:0)

试试这个

$products = Product::latest()->take(2)->with('categories')->get();