Nano Hash - криптовалюты, майнинг, программирование

Многоуровневые отношения в Laravel

У меня есть эта проблема. В Laravel у меня есть 3 модели, т.е.:

class Department{
    public function coordinations(){
        return $this->has_many('Coordination');
    }
}

class Coordination{
    public function sites(){
        return $this->has_many('Site');
    }
}

class Site{
    public function assets(){
        return $this->has_many('FAssets');
    }
}

class FAsset{}

Я хочу отобразить все активы, сгруппированные по отделам. Я попытался сделать что-то вроде:

@foreach($dependencias as $dep)
    <tr>
         <td colspan="8" style="width:100%">Dependencia: {{ $dep->code }} {{ $dep->description }}</td>
    </tr>
@foreach($dep->coordinations()->sites()->assets()->get() as $asset)
...

Но я получил ошибку «Метод [сайты] не определен в классе запросов». Я искал быстрый способ загрузки, но я не понимаю, как он может работать с дополнительным уровнем отношений.

Кроме того, я собирался запросить все активы и отфильтровать активы с учетом фактической координации, но я думаю, что это займет много времени для загрузки...

заранее спасибо

02.07.2013

Ответы:


1
class Deparment{
public function department_assets(){
    $assets = array();

    foreach($this->has_many('Coordination')->get() as $coordination){
            foreach($coordination->sites()->get() as $site){
                foreach($site->assets() as $asset)
                {
                    $assets[] = $asset;
                }
            }
        }

    return $assets;
    }
}

Теперь мы можем...

@foreach($dep->department_assets() as $asset)
02.07.2013
  • Что ж, теперь это вызов функции-члена site() при ошибке, не связанной с объектом, когда нет нулевого значения? 02.07.2013
  • Мне это кажется странным. Было бы полезно увидеть контекст, в котором он используется, чтобы я мог лучше понять, что вы пытаетесь сделать. Кажется, что он возвращает массив объектов, а не строку, что означает, что вы получаете несколько моделей. Возможно, ваша связь has_many возвращает несколько результатов? Поскольку вы не можете делать реляционные запросы к нескольким результатам, обычно только к отношению has_one. Вы пытались заменить все эти методы get() методами first()? 02.07.2013
  • Ну, как я понимаю, has many вернет несколько элементов связанной объектной модели. Отдел связан со многими координациями, координация связана с одним или несколькими сайтами, а на сайте может быть один или несколько активов или элементов. Я хочу отобразить все активы, размещенные на разных сайтах всех разных координаций каждого отдела. 02.07.2013
  • Я мог бы запросить активы, но я думаю, что прямой способ сгруппировать активы по отделам - это такой подход. 02.07.2013
  • Теперь я вижу, кажется, я неправильно понял, что вы пытались сделать. Поскольку вы можете запрашивать только одну модель за раз, попытка доступа к отношениям в нескольких координациях для ex не будет работать, если вы не пройдете их по циклу. Я не думаю, что это напрямую возможно с отношениями has_many, но я уверен, что вы могли бы написать простой цикл, чтобы обойти это, за исключением того, что он должен быть в вашем контроллере, поскольку такая логика не очень хороша. вид. Я уверен, что вы могли бы даже написать это из своей модели, я мог бы попытаться написать что-нибудь для вас, когда у меня будет свободная минутка, так как я сейчас на работе. 02.07.2013
  • Эй, не беспокойтесь, мне просто интересно, существует ли прямой способ сделать это, если я хорошо помню, Django делает это таким образом... или, может быть, нет. В любом случае спасибо за помощь и подсказки. 02.07.2013
  • Я все равно попробовал, проверьте мой отредактированный ответ. Это не проверено, но есть шанс, что это сработает, должен быть способ сделать это напрямую, как вы сказали, я уверен, что в какой-то момент он будет реализован! 02.07.2013
  • Я пробовал этот подход. Я проверю это, но это должно сработать. Меня беспокоит то, что если таким образом он запрашивает каждую модель или делает что-то еще. Но это другое обсуждение. Большое спасибо. 02.07.2013
  • Пожалуйста. В любом случае, единственный логически возможный способ получить все активы для каждого отдела — это запросить все эти модели. Иначе это невозможно, но я полагаю, для этого и было создано кэширование. Но да, главное, что у вас есть решение :) 02.07.2013
  • Это странно, но теперь я получаю, что Method [assets] не определен в классе Query. Проверил метод ресурсов сайта и, похоже, ничего не случилось. Laravel хорош, но я думаю, что ему не хватает лучшего Doc. 02.07.2013
  • Это не имеет смысла, но я полагаю, что это настолько далеко, насколько это возможно. Кажется, что метод отношения assets() назван неправильно, но это не похоже на это. И да, Laravel — хороший фреймворк, но есть еще функции и объяснения, которые нужно реализовать, хотя это еще ребенок! Также есть довольно отзывчивый форум, который всегда готов помочь. Я использую его прямо сейчас и нахожу, что он отлично работает для всего, что мне нужно, до сих пор! 02.07.2013
  • Я не понимаю, изменил имя на отношения, и это не работает. Но я не знаю, почему эта трассировка: Laravel\Database\Query-›__call('as_assets', Array) запрос вызывает ошибку, а не модель. - 02.07.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..