Saya menggunakan Views 7.x-3.6 dan saya mencoba mengubah GROUP BY
klausa dengan hook_views_query_alter()
seperti di bawah ini:
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == "view_name"){
$query->add_groupby('field_name');
dpm($query);
}
}
Ketika saya melihat di $query
, yang groupby
klausul benar diaktifkan tetapi query SQL tidak terpengaruh : yang GROUP BY
klausul tidak muncul:
Apa yang akhirnya saya lakukan adalah menggunakan kait inti Drupal ( hook_query_alter()
) dan itu bekerja dengan baik: SQL sekarang terpengaruh.
function mymodule_query_alter(QueryAlterableInterface $query) {
$view_name = 'view_name';
if ($query->hasTag('views_' . $view_name)) {
$query->groupBy('field_name');
}
}
Ada alasan mengapa saya hook_views_query_alter()
tidak bekerja? Saya ingin tahu apakah ada cara yang lebih bersih untuk melakukannya dan.
nid
dengan grup oleh. Itu tidak perlu bagi saya. Ada pilihan lain? Apakah Anda tahu cara menambahkan unik dalam permintaan tampilan?views_handler_filter::query()
. Coba$query->distinct();
dihook_query_alter
Terlambat ke pesta tetapi ini mungkin membantu orang lain.
Dalam kasus saya, saya memberikan daftar pengguna (menggunakan modul tambahan Profile2) dengan bidang Istilah Taksonomi ( https://drupal.org/node/1808320 ). Saya melihat beberapa hasil yang tidak dapat saya singkirkan melalui API Views 3.
Dalam modul khusus saya, saya menambahkan:
Parameter untuk add_field adalah
sumber
Jika Anda masih menghadapi pernyataan GROUP BY yang tidak perlu yang ditambahkan ke kueri, Anda dapat menghapusnya
hook_query_alter()
. Saya memecahkan masalah dengan memesan komentar oleh komentar orang tua yang paling berkomentar misalnya.Jadi
hook_views_query_alter()
saya punya:Saya mendapat kesalahan terkait dengan ketidakmampuan untuk dikelompokkan oleh
bidang yang sebenarnya merupakan hasil dari
COUNT()
fungsi SQL .Saya berakhir dengan ini:
sumber
Jika Anda melihat adalah dokumentasi hook_views_query_alter , saya yakin permintaan sudah siap untuk dijalankan. Misalnya, penggantian telah dilakukan oleh API database dan akan dikirim melalui kawat ke MySQL. Contoh lain dari penggunaan hook_views_query_alter dapat dilihat di blog BTMash .
Ini menjadi kasus Anda tidak lagi memiliki objek permintaan DB tetapi potongan-potongan pernyataan SQL dengan ekspresi, variabel, dll sebagai array.
Saya tidak punya pertanyaan di depan saya tetapi sesuatu seperti kode yang belum diuji berikut adalah yang Anda inginkan:
sumber
$query
objek diubah (berbeda dari yang di atas tentu saja) tetapi sekali lagi, permintaan SQL tidak berubah!Ini adalah cara dilakukan di views_query_alter; bagian node_access tidak diperlukan.
sumber
Saya bertanya-tanya bahwa tidak ada yang memberikan solusi nyata yang hanya berfungsi. Ada satu metode yang saya temukan di sini , banyak terima kasih kepada @ b-ravanbakhsh:
sumber
Dalam Drupal 8 dan berkat pendekatan graceman9, itu akan menjadi:
sumber