/**
  * 
  * @param QueryInterface $query
  * @param string $relationName
  * @param string $relationTableName defaults to null (use when you create alias)
  * @param string $relationTableAlias defaults to null (use when you create alias)
  */
 public function joinWithRelation(&$query, $relationName, $relationTableName = null, $relationTableAlias = null)
 {
     if (empty($relationTableAlias)) {
         $query->joinWith([$relationName]);
     } else {
         $query->joinWith([$relationName => function ($query) use($relationTableAlias, $relationTableName) {
             $query->from([$relationTableAlias => $relationTableName]);
         }]);
     }
 }