1) Конкретно для вашего запроса вы можете использовать подобный код:
T1::find()->andWhere(['id in ( select t2_id
from T2
where user_id = :user_id) ',['user_id'=>200]])->andWhere(['>', 'created_at', 0])->all()
В этом случае у вас сохраняется подзапрос, и смысл его использовать только если вы заранее знаете, что записей там мало, и вытащить их нужно именно так.
2) Ваш запрос вы можете переписать как:
select t1.*,t2.t2_id
from T1
left join t2 on
t2.t1_id = t1.id
where created_at > 0 and t2.user_id=200
Этот вариант правильней, так как он использует полноценный джоин.
А дальше у вас есть два подварианта -
а)
T1::find()->leftJoin('t2','t2.t1_id = t1.id')->andWhere(['t2.user_id'=>'200'])->andWhere(['>', 'created_at', 0])->all()
б)
Прописать связи , у вас вроде бы правильно, и далее -
T1::find()->joinWith(['t2'])->andWhere(['t2.user_id'=>'200'])->andWhere(['>', 'created_at', 0])->all()
В этом случае происходит жадная загрузка, и в модели вы сможете получить $t1->t2->$param.