Trying to query post by term for each post in pre_get_posts

Sorry guys, just a general Wordpress query help, we are trying to show all post type "walks" sorted by the term "state", we need to run this through pre_get_posts so it preserves the rest of the query. Below is what we have however it is only pulling in the slug of the first term from "state" and not looping through. You can see from the URL that we need all posts grouped by "state" below we have included our current code... oooooh so close.

add_action( 'pre_get_posts', 'walk_filter_get_posts' );

function walk_filter_get_posts( $query ) {

    if ( !is_admin() && $query->is_main_query() && $query->is_post_type_archive('walk')) {

			$query->set('post_type', 'walk');
			$query->set('orderby', 'title');
			$query->set('order', 'ASC');
            $query->set('posts_per_page', -1); 

			$terms = get_terms( 'state' ); if ( ! empty( $terms ) ) {
				foreach ( $terms as $term ) {

			$query->set('tax_query', array(
                    'taxonomy'  => 'state',
                    'field'     => 'slug',
                    'terms'     => $term->slug,
                    'operator'  => 'IN'

            	}} // end foreach

    }} // end add_action