Alanlar hakkında toplu bilgi elde etmenin en sürdürülebilir yolu nedir?


12

EntityFieldQuery SQL-agnostik olduğu için alan verileri üzerinde toplama işlevlerini (SUM, AVG, vb.) Çalıştırmak için kullanılmaz. Bununla birlikte, bu tür işlemlerin zaman zaman meşru bir şekilde yürütülmesi gerekir. Göre SQL EntityFieldQuery ile fonksiyonu ve özellikle EntityFieldQuery ve nasıl toplama işlevleri SUM, ARG ve MAX kullanımı , SQL sorguları kullanılması gereken ve bu yaklaşım benim kullanım durumu iyi uyuyor. Dün @chx ile konuşuyordum ve alan adını ve sütun adını bulmak için birkaç iç işlev kullanmanızı tavsiye etti. Ben sadece bunun sürdürülebilir olup olmadığını ve otehrs serbest bırakabilirsiniz bir kod tabanında yapmak uygun olup olmadığını merak ediyorum.

Eğer en iyi yolsa, o zaman en iyi yol budur. Kesinlikle emin olmadan önce yapmak istemiyorum çünkü dağınık hissediyor.


Şimdilik, sadece mevcut ihtiyaçlarıma uygun iç fonksiyonları ( _field_sql_storage_tablename($field)ve _field_sql_storage_columnname($field_name, $column) kullandım , ancak sürdürülebilir değil, bu yüzden hala bu sorunun cevabıyla ilgilenmek gerekiyor.
wizonesolutions

Yanıtlar:


2

Görünüm alanı modülü görüşlere taban tablolar gibi saha tabloları göstermesini sağlar. Bu , temel tablonun alan tablosu olması ve alan verilerinin yüklendiği bir varlık olmaması nedeniyle Görünümlerin varsayılan davranışından farklıdır . Örneğin düğümü temel tablo olarak seçerken alanlar ekleyebilirsiniz, ancak sorgudaki birincil (temel tablo) yine de verilerinize bağlı olarak toplama işlevlerini (bazılarının çoktan bire ilişkisini) bozabilecek düğümdür. alanları düğüme).

Görünümler alanı, toplama işlevlerinin düzgün çalıştığı anlamına gelen alan tablolarına doğrudan erişmenizi sağlar. Ayrıca, diğer alan tablolarına "ilginç" birleşimler yapmanız gerekirse, aşağıdakileri kullanarak bunları tamamen kontrol edebilirsiniz.

/**
 * Implements hook_views_data_alter().
 */
function mymodule_views_data_alter(&$data) {
  views_field_add_multi_join($data, /* see docs */);
}

Bu, kullanımı oldukça basittir ve daha sonra aynı anda birden çok alan tablosunda toplama işlevlerini gerçekleştirmenizi sağlar. Daha sonra manuel olarak bir görünümü çağırabilir $view->execute()ve sonuçları görünümden çekebilirsiniz. Görünüm belgelerinde bunun örnekleri vardır.

EntityFieldQuery üzerindeki bu yaklaşımın faydaları, süreci Views'da (neredeyse herkes zaten kullanacak) yönetebilmeniz ve fiziksel sorgu oluşturma işlemini daha az doğrudan bir şekilde gerçekleştirmesine izin verebilmenizdir. Buna ek olarak, bu tür bir toplu verileri bir yönetici ekranında görüntülemek isteyeceksiniz ve daha sonra hem görüntüleme sağlamak hem de ek amaçlarla koddaki sonuçlara erişmek için görünümü kullanabilirsiniz.


Bunu kontrol etmem gerekecek. Sorgu elle yapmak yerine bu kodu bilgisayarlı alanlarıma takas edebilirim. Muhtemelen yakında ihtiyacım olan sitede çalışacağım ve bir noktada rapor vereceğim. Eğer işe yararsa, kabul edeceğim.
wizonesolutions

0

Bu görünümler için bir eklenti modülünde yapılabilir mi? Sorguları çok iyi işler ve bağlamsal filtrelerin tüm değerlere varsayılan olarak girebileceği ve her birinde kullanılabilir sonuçlar üzerinde sayım yapabildiği durumlarda eylemler gibi toplu işlevlerle bazı sonuçlar yayınlanır. Sorguların işlevleri orada olmalı, ancak bunun için bir UI formu gerekli olacaktır. Bunun mantıklı olup olmadığını bana bildirin. Ben sadece görüşleri kesmeye başladım ve spekülasyon yapıyorum.


COUNT sorgu varlıklar üzerinde çalıştırılabilir, bu da çözüldü. SUM ile daha çok ilgileniyorum. views_calc içgörü sağlayabilir, ama ben de hesaplanmış bir alanda değerini kullanmak istiyorum ... Ben de views_get_view_result (veya benzeri) ile yapabileceği. Ancak, öncelikle bu sorguyu oluşturmak için Views almak hiledir. Görünüşe göre, hackish yolu en iyisi olabilir. Sanırım bununla başlayacağım çünkü onu bırakmazsam altın olurum. Eğer yaparsam, birisi umarım bir yama gönderir.
wizonesolutions
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.