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

Laravel выбирает конкретный столбец при загрузке коллекции

Возьмите следующий фрагмент кода. Я загружаю модель OrderDetail с отношением к Inventory:

// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
    ->whereIn('inventory_id', $inventory_ids)
    ->with('inventory')
    ->get();

После загрузки коллекции я выполняю следующую обработку:

// Deduct reserved stock from live un-picked orders
foreach ($order_details as $detail)
    if (array_key_exists($detail->inventory->sku, $free_stocks))
        $free_stocks[$detail->inventory->sku] -= 
            ($detail->qty_ordered - $detail->qty_picked);

Как видите, из загруженной коллекции мне нужно только следующее:

  • order_details.qty_ordered
  • order_details.qty_picked
  • инвентарь.sku

Я хотел бы оптимизировать это и загружать только то, что мне нужно, т.е. явно указать, какие столбцы я хочу загрузить из основной и связанной таблицы.

Как я могу это сделать? Когда я попробовал следующее, это, похоже, не работает:

// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
    ->whereIn('inventory_id', $inventory_ids)
    ->with('inventory')
    ->get(['qty_ordered','qty_picked','sku']);

// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
    ->whereIn('inventory_id', $inventory_ids)
    ->with(['inventory' => function($query) {
        $query->addSelect(['id','sku']);
    }])
    ->get(['qty_ordered','qty_picked']);

Любые идеи?



Ответы:


1

Вам нужно использовать select в запросе, чтобы получить выбранные столбцы. Или, если это не сработает, вам нужно использовать соединения laravel.

Также см. выбор столбцов из запросов в официальном документе laravel. http://laravel.com/docs/4.2/queries.

// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
    ->whereIn('inventory_id', $inventory_ids)
    ->with(['inventory' => function($query) {
        $query->addSelect(['id','sku']);
    }])
    ->select('qty_ordered','qty_picked')
->get();
06.03.2015
  • Или таким образом. $order_details = \OrderDetail::whereIn('order_id', $live_order_ids) -›whereIn('inventory_id', $inventory_ids) -›inventory() -›get(['inventory.sku','qty_ordered','qty_picked' ])-›toArray(); 06.03.2015
  • Новые материалы

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

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

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

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

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

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

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