Допустим, у нас есть две «связанные» таблицы.
Таблица Категорий и таблица Продуктов.
В одной категории может быть много продуктов (один ко многим).
Каждый продукт привязан к одной категории (один к одному), полем parent который указывает на поле id таблицы Категорий.

С помощью отложенной или жадной загрузки мы можем, например, получить все товары, тогда когда получаем каталог (млм все каталоги). То-есть нам не нужно сначала делать запрос в каталог и только потом в товары. Запрос в товары произойдет автоматически при запросе каталога.

Открываем модель категорий
и прописываем заимосвязь один ко многим (hasMany).

Код:

class Category extends ActiveRecord
{
    public static function tableName()
    {
        return 'products';
    }

    public function getProducts(){
        return $this->hasMany(Product::className(), ['parent' => 'id']);
    }
}

Открываем модель товаров
и прописываем заимосвязь один к одному (hasOne).

Код:

class Product extends ActiveRecord
{
    public static function tableName()
    {
        return 'products';
    }

    public function getCategories(){
        return $this->hasOne(Category::className(), ['id' => 'parent']);
    }
}

Далее в контроллере (например) запросим все категории.

$cats = Category::find()->all();

передадим в нашу вьюшку (например show)

return $this->render(‘show’, compact(‘cats’));

Ну а во вьюшке все выведем.

Код:

foreach ($cats as $cat){
    echo '<ul>';
        echo '<li>' . $cat->title . '</li>';
        $products = $cat->products; //в этом месте мы используем созданную нами связь (getProducts)
        foreach ($products as $product){
            echo '<ul>';
                echo '<li>' . $product->title . '</li>';
            echo '</ul>';
        }
    echo '</ul>';
}

Вывели категирии с продуктами в данном случае мы отложенной загрузкой.
Что значить отложенной? Это значить что на каждую позицию (категорию) был сделан отдельный запрос в базу данных. Если у нас много категорий, например 50. То и запросов в базу будет 50. Чтобы сократить количество однотипных запросов в один запрос, нужно использовать (рекомендуется) жадную загрузку.

Для реализации жадной загрузки нам нужно всего лишь указать связь в нашем запросе, который мы делали в контроллере.

Было (отложенная)
$cats = Category::find()->all();

Меняем на жадную
$cats = Category::find()->with(‘products’)->all();

Жадную загрузку нужно использовать в том случае, если запрос по большому количеству данных. В ином случае используем отложенную (ленивую) загрузку.