Связь «Один ко многим» (One to many)

Связь «Один ко многим» позволяет к одной записи базы данных привязать несколько других записей, позволяя реализовать комментарии, галерею и другое.

Сначала для таблицы «comments» надо создать поле post_id, и в модели добавить метод $this->hasMany(), внутри которой указать таблицу с комментариями.

# src/Model/Table/PostsTable.php

class PostsTable extends Table
{
    public function initialize(array $config): void
    {
        // …
        $this->hasMany('Comments');
    }
}

Теперь когда надо выбрать статью вместе с комментариями, надо добавить параметр contain.

$post = $this->Posts->get($id, [
    'contain' => 'Comments'
]);

// пример вывода комментариев
foreach ($post->comments as $comment) {
    $comment->content;
}

Будут выбираться те комментарии, в котором в поле «post_id» указан ИД текущей страницы.

Условия выборки комментариев

П умолчанию выбираются все комментарии для текущей страницы. Указать условия можно в модели через метод $this->setConditions().

# src/Model/Table/PostsTable.php

class PostsTable extends Table
{
    public function initialize(array $config): void
    {
        // выбирать комментарии со статусом "1"
        $this->hasMany('Comments')
             ->setConditions(['status' => 1]);
    }
}