Gridview dataprovider и т.п. не использую, все пишу руками.
someClass::getProducts()
$this->category_id
откуда оно получается? Если там просто ID, то это ID можно подменить. Правильней сначала запросить категорию и уже, если категория найдена получать её ID $category->id
link()