'author.description' => 'required',
id
для аккаунта, а id поста будет как post.id
$qb = $this->createQueryBuilder('p');
$qb->leftJoin(Entity1::class, 'a', 'WITH', 'p.id = a.id')
->leftJoin(Entity2::class, 'fp', 'WITH', 'p.id = fp.id')
->leftJoin(Entity3::class, 'vm', 'WITH', 'p.id = vm.id');
$expressionBuilder = new Expr();
$expressions[] = $expressionBuilder->orX(
$expressionBuilder->isInstanceOf('p', Entity1::class),
$expressionBuilder->isInstanceOf('p', Entity3::class),
$expressionBuilder->andX(
$expressionBuilder->isInstanceOf('p', Entity2::class),
$expressionBuilder->eq('fp.displayed', ':displayed')
)
);
$qb->andWhere($expressionBuilder->andX(...$expressions));
$qb->andWhere('p.active = :active')
->setParameter('active', true)
->setParameter('displayed', true)
->andWhere('p.publishedAt < CURRENT_TIMESTAMP()');
$qb->setMaxResults($limit)
->setFirstResult($offset)
->orderBy('p.publishedAt', 'DESC');
return $qb->getQuery();
статьи из интернета не подошли?
О каком сайте идет речь?
Он уже существует?
Если существует -- вы хотите ЕГО переписать?
Или дописать к нему какие-либо вещи?
Если последнее -- это сложнее и не возможно что-либо сказать, так как мало ли какой зверь у вас там и на чем написан,
Если сайта еще нет или переписать хотите -- то ставите Джанго, настраиваете предварительно необходимое окружение и пишите по мануалам/документации