Laravel 带 where 条件的嵌套 foreach 的语法

Laravel Syntax for nested foreach with where condition

在 laravel 5 或更高版本中是否有任何 laravel 标准或方法来实现此目标提前谢谢您

$sql = "SELECT * FROM categories";

$result = $conn->query($sql);


    if ($result->num_rows > 0) {


while ($row = $result->fetch_assoc()) {
        echo $row['category']."[";
        $sql2 = "SELECT * FROM subCategories where category_id = ".$row['id']." limit 4";
        $result2 = $conn->query($sql2);
        if ($result2->num_rows > 0) {
            while ($row2 = $result2->fetch_assoc()) {
                echo $row2['name']." ; ";
            }
        }
        echo " ]</br>";
    }
} else {
    echo "0 results";
}

当然可以。您可以使用 Laravel 的 Eloquent ORMModel 轻松实现此目的。

首先,您必须创建两个模型并定义它们之间的关系。首先是 Category 模型:

<?php // Category.php
namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

然后SubCategory型号:

<?php // SubCategory.php
namespace App;

use Illuminate\Database\Eloquent\Model;

class SubCategory extends Model
{
    protected $table = 'subCategories';

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

之后,获取类别和类别下的子类别就像下面一样简单:

<?php
// get all categories
$categories = Category::all();

// get subcategories for each category
foreach($categories as $category)
{
    $subCategories = $category->subcategories();
    foreach($subCategories as $subCategory) 
    {
        echo $subCategory;
    }
}

我同意 in defining Eloquent models. But when you query in the way he describes you'd face N+1 issue。你可以Eager load来解决。就这样吧。

$categories = Category::with('subcategories')->get();

然后你可以像这样循环

foreach ($categories as $category) {
    foreach ($category->subcategories as $subCategory) {
        echo $subcategory;
    }
}