Rinse the rice under cold water until the water runs clear.
Add the rice to a pan, pour over the chicken stock or water, and boil on a medium heat until the rice is about 80% cooked, so it still has a bite to it, and most of the liquid is evaporated.
Reserve 2 tablespoons of the stock, and drain the rest.
In a large, no-stick pan heat up the oil on a low to medium heat, add the onions peeled and chopped julienne, season with a pinch of salt, and fry the onions until golden.
Reserve half of the onions for layering, then add the peeled and chopped garlic and ginger to the pan.
Add all the spices and mix well, then add the chopped tomatoes and tomato paste.
Place a lid on the pan, and leave it to cook for 2-3 minutes until the tomatoes are mushy.
Add the yogurt and give it a stir, then add the cubed chicken.
Mix well to combine.
You can either remove the chicken and sauce from the pan, or use a different non-stick pan.
Spread half of the partially-cooked rice over the bottom of the pan, spoon the chicken over the rice, then spread the remaining rice over.
Drizzle the saffron-infused milk over the rice in a circular motion.
Top with the reserved caramelised onions, drizzle over the reserved rice water, add the butter, then place the lid on, and cook on a low heat for 20 minutes.
Remove the pan from the heat, but keep the lid on for a further 10 minutes.
Use a fork to fluff everything up and garnish with chopped parsley or coriander.