Задать вопрос
@mmka

Почему возвращается многоуровневый json объект (ajax+laravel+underscore)?

Ситуация следующая. У меня на сайте есть фильтр для товаров. Структура такая: Коллекция -> Товар. В коллекции хранятся тип, форматы, производитель а в товаре помимо всего остального цена и название коллекции. Соответственно при фильтрации цен, мы сначала ищем товар с соответствующей ценой, вытаскиваем название коллекции из товара, а дальше по этому названию ищем коллекцию и показываем эту коллекцию в виде. Проблема такая:
вот вам код контроллера laravel paste.jesse-obrien.ca/in
а вот многоуровневый json-объект который возвращает контроллер https://www.filepicker.io/api/file/xQRk9rSKSKW0HSFvKyLC . Я использую шаблонизатор underscore, естественно если объект многоуровневый, то доступ к аттрибутам в шаблонизаоре становится не возможным. Не спрашивайте почему запрос get. Так нужно мне так легче. Вот ajax запрос
if(type != "0") {
      $.ajax({
        type: 'get',
        url: '/filter/type/'+type+'/min/' + min + '/max/'+max,
        dataType: 'json',
        success: function(data) {
            $(".prodlist").html(_.template(template,{data:data }));
        }
      });
    }


Вот шаблон
<%
        // repeat items 
        _.each(data,function(item,key,list){
          _.each(data,function(item,key,list){
      %>
        <li id="item134" data-id="134">

            <div class="cube cube1">
              <div class="cfront">
                <div class="img">
                  <a href="/collection/<%= item.attributes.title %>">
                  	<img src="/images/collection/<%= item.attributes.preview_img %>" class="default">
                  </a>
              </div>
            </div>

            <div class="cube cube2">
              <div class="cfront">
                <h3>Коллекция <a href="/collection/<%= item.attributes.title %>"><%= item.attributes.title %></a></h3>

                <p>ФОРМАТЫ:   	  
                <% _.each(products,function(products,key,list){ %>
                	<span><%= products.formats %></span>
			    <% }); %>

                <ul class="items4">
                  <li style="width:100%;text-align:left;padding-left:6%">
                  ПРОИЗВОДИТЕЛЬ: &nbsp;
                  	<% _.each(manufacturers,function(manufacturer,key,list){ %>
                		<% if(manufacturer.attributes.id == item.attributes.manufacturers_id) { %>
                			<%= manufacturer.attributes.title %>, &nbsp;
                		<% } %>
			    	<% }); %>
			    	<% _.each(country,function(c,key,list){ %>
                		<% if(c.attributes.id == item.attributes.country_id) { %>
                			<%= c.attributes.title %>
                		<% } %>
			    	<% }); %>
                  </li>
                </ul>
              </div>
            </div>

            <div class="cube cube3">
              <div class="cfront">
                <div>
                  <div class="resolution">
                    <strong>

                    </strong> <span>&nbsp;<em>руб.</em></span>
                    <strong>73</strong> <span>эелементов <em>в коллекции</em></em></span>
                    <a href="/collection/<%= item.attributes.title %>"><span><span></span></span></a>
                  </div>
                </div>
              </div>
            </div>

          </li>
      <%
        }); });
      %>
  • Вопрос задан
  • 3237 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Если я правильно понял проблему, то: в пятой строке контроллера Вы к массиву добавляете результат выполнения запроса, а это массив объектов, а не отдельный объект даже если запрос возвращает только одну строку или не возвращает вообще ничего.
Т.е. я бы заменил
$collection[] = Collection::where('title', '=', $key->attributes['collection_id']) -> get();

на
$collection[] = Collection::where('title', '=', $key->attributes['collection_id']) -> get()[0];


А вообще, узнайте, как в вашей ORM делать SQL JOIN. Задача решается одним запросом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы