$select = $this->getDrinkTable()->newSelect(); $this->getDrinkTable()->getSelect($select) ->join('drink_type','drink.drink_type_id = drink_type.drink_type_id',array()) ->join('drink_brand','drink_brand.drink_brand_id = drink_brand.drink_brand_id',array()) ->join('drink_company','drink_company.drink_company_id = drink_brand.drink_company_id',array()) ->join('drink_flavor','drink_flavor.drink_id = drink.drink_id',array('calories_for_100g')) ->join('drink_ingredient','drink_ingredient.drink_flavor_id = drink_flavor.drink_flavor_id',array()) ->join('drink_flavor_type','drink_flavor.drink_flavor_type_id = drink_flavor_type.drink_flavor_type_id',array('drink_flavor_type_name')) ->join('drink_ingredient_type','drink_ingredient_type.drink_ingredient_type_id = drink_ingredient.drink_ingredient_type_id',array('drink_ingredients'=>new \Zend\Db\Sql\Expression('GROUP_CONCAT(drink_ingredient_type_name)'))) ->join('liquid_color','liquid_color.liquid_color_id = drink_flavor.liquid_color_id',array('is_transparent')) ->join('liquid_color_type','liquid_color_type.liquid_color_type_id = liquid_color.liquid_color_type_id',array('liquid_color_type_name')) ->join('alcohol_sum','alcohol_sum.alcohol_sum_id = drink_flavor.alcohol_sum_id',array('alcohol_by_volume')) ->where ->equalTo('drink_flavor_type.drink_flavor_type_name',$drinkFlavor) ->equalTo('drink_company.drink_company_name',$drinkCompany) ->equalTo('drink_brand.drink_brand_name',$drinkBrand) ->equalTo('drink_type.drink_type_name',$drinkType); $resultSet=$this->getDrinkTable()->selectWith($select); $result=""; if ($resultSet->count()>0) { $rows=$resultSet->toArray(); if (count($rows) > 1 || $rows[0]['liquid_color_type_name'] != null ) { //overcome zf bug $result=json_encode($rows[0]); } }