Pods: kemungkinan masalah taksonomi dengan grup oleh

Dibuat pada 7 Jun 2016  ·  21Komentar  ·  Sumber: pods-framework/pods

kemungkinan masalah taksonomi dengan grup dengan dikirimkan melalui Slack oleh jimtrue

Help Wanted Support

Semua 21 komentar

Ambil semua acara yang dipesan berdasarkan jenis festival dan kemudian berdasarkan judul

pod festival adalah taksonomi khusus.
pod acara adalah jenis posting khusus.

// assume we´ve got 6 events and 2 festivals

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1, 'groupby' => 'festival.name');
$events = pods('event', $params)

// output should be
Event 1 (Festival 1)
Event 3 (Festival 1)
Event 5 (Festival 1)
Event 2 (Festival 2)
Event 4 (Festival 2)
Event 6 (Festival 2)

// ... but is
Event 1 (Festival 1)
Event 2 (Festival 2)

Setelah pengujian beberapa saat, tampaknya berfungsi ketika acara mendapat bidang hubungan pod yang menargetkan taksonomi festival. Tapi hanya tanpa groupby.

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);

Kelemahan dengan ini adalah bahwa hubungan festival sebagai taksonomi tidak dapat dipertahankan lagi melalui formulir quickedit wordpress (ok, plugin tambahan dapat melakukannya)

keluarannya adalah
orderby

seharusnya
orderby-02

Ketika Anda mengelompokkan berdasarkan festival.name berarti hanya satu rekaman per festival yang akan ditampilkan.

Kedengarannya seperti yang Anda inginkan adalah memesan berdasarkan tahun, lalu nama festival, lalu judul posting, bukan?

Membawa yang ini dari diskusi di Slack #support, kami telah menguji dengan menggunakan Taksonomi dan tampaknya mengabaikan orderby taxonomy.name. Itu terutama yang kami uji sebagai masalah. Saya melakukan tes lokal untuk melihat apakah ada masalah dengan orderby yang berkaitan dengan taksonomi terkait atas hubungan dengan taksonomi, karena itu akan menjadi masalah.

Juga, buat catatan pada diri saya sendiri bahwa group by seharusnya hanya digunakan untuk perhitungan total ringkasan dan hal-hal seperti itu, saya kira, jika hanya mengembalikan satu baris per grup. @ sc0ttkclark apakah ini salah satu situasi di mana groupby paling baik dipasangkan dengan parameter 'bidang' atau 'sql' juga untuk melakukan perhitungan ringkasan yang tepat?

@sc0ttkclark itu benar. Pada awalnya saya salah memahami konsep groupby tetapi masih ada perilaku yang
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
berakhir seperti output yang ditunjukkan pada gambar. Saya mencoba mereproduksi masalah ini dengan versi wordpress + pod yang baru diinstal. Sayangnya itu bekerja sebagaimana mestinya : nyengir:

@kristonovo Ini diurutkan dengan tepat? Hanya menggunakan taksonomi seperti yang Anda inginkan?

@jimtrue dalam pengaturan pengujian yang baru diinstal: ya. Dengan proyek saya yang sebenarnya: tidak. Di sini saya masih harus menetapkan bidang hubungan pod nyata untuk mencapai hasil yang diinginkan ... apakah ada langkah debug yang dapat saya ikuti untuk memberikan info lebih lanjut?

@kristonovo Itu cukup aneh. Itu berarti sesuatu yang lain 'menginjak' semacam itu. @sc0ttkclark ada saran? Anda dapat mencoba melihat jenis yang tidak berfungsi dengan yang berikut ini ditempelkan ke URL: ?pods_debug_sql_all=1 sehingga kami dapat melihat kueri SQL yang dipanggil dan membandingkannya.

Apakah Anda memiliki plugin lain yang berjalan pada versi yang tidak berfungsi yang mungkin menyentuh taksonomi?

@kristonovo apa di tangkapan layar Anda "festival.name"?

@sc0ttkclark itu akan menjadi 2014, 2015

Mungkin mempertimbangkan 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' (jika Anda menginginkannya 2015, maka 2014).

Saya akan mencoba dengan url debug dan kueri CAST segera.

@sc0ttkclark
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
menghasilkan

[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`' at line 20]
        SELECT DISTINCT `t`.* FROM `wp_table_posts` AS `t` LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON `rel_festival`.`object_id` = `t`.`ID` LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON `rel_tt_festival`.`taxonomy` = 'festival' AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id` LEFT JOIN `wp_table_terms` AS `festival` ON `festival`.`term_id` = `rel_tt_festival`.`term_id` WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) ) ORDER BY CAST(`festival`.`name` AS INT(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

Mungkin tanpa INT(4) dan sebagai gantinya gunakan DECIMAL(4,0)

@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
dengan pods_debug_sql_all=1

1

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

2

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

3

`SELECT `ID`, `post_name`, `post_parent` FROM `wp_table_posts` WHERE `post_type` = '_pods_field' AND ( `post_name` IN ( 'festival', 'name' ) )`

4

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

5

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

6

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

7

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

@sc0ttkclark
tidak ada lagi kesalahan sql dengan DECIMAL (4,0) tetapi sekali lagi dipesan oleh acara bukan oleh festival
Sementara itu semua plugin kecuali pod dinonaktifkan. Masih ada masalah itu :(

Pengujian hanya dengan festival.name:

$params = array('orderby' => 'festival.name DESC');

keluaran
orderby-03

ketika
$params = array('orderby' => 'festival.name ASC');

keluaran
orderby-04

Apakah Anda sepenuhnya yakin telah memberikan informasi yang benar tentang output? Bisakah Anda memberikan PHP yang Anda gunakan untuk membuat daftar konten?

Semakin lama waktu yang dibutuhkan untuk menemukan solusi semakin saya khawatir itu mungkin kesalahan saya sendiri :dancer:

<?php
/**
 * Template Name: Events
 */

get_header();
?>

<div class="column-1-3">
    <h1><a href="/events" target="_self">Events</a><br><br></h1>

    <div class="event">

        <?php
        $params = array('orderby' => 'festival.name');
        $events = pods('event')->find($params);

        if ($events->data()) {

            while ($events->fetch()) {

                echo $events->display('festival.name') . ' - ' . $events->display('post_title') . '<br>';


            }

        }
?>

    </div>

</div>


<?php get_sidebar( 'right' ); ?>
<?php get_footer(); ?>

... dan ini adalah pengaturan di pod acara:

image

Adakah kemungkinan Anda bersedia memberikan login bagi kami untuk masuk ke area Admin Pods Anda untuk melihat ini untuk Anda? Anda dapat mengirimkannya secara pribadi di Slack kami (http://pods.io/chat/) atau melalui formulir ini: https://pods.io/help/

Ya, saya bisa menyiapkan lingkungan pengembang. Akan membutuhkan beberapa waktu meskipun. Sementara itu saya menguji satu hal lain:

  • membuat pod uji yang disebut bio (jenis posting khusus)
  • memeriksa festival taksonomi bawaan
  • kueri orderby berfungsi seperti dikecualikan
  • menambahkan taksonomi bawaan kedua yang disebut agegroup (seperti di pod acara)
  • permintaan orderby tidak lagi berfungsi
  • menghapus hubungan taksonomi dari bio ke kelompok usia
  • masih tidak teratur

params selalu sama:
$params = array('orderby' => 'festival.name DESC');

Mungkinkah beberapa hubungan taksonomi mengganggu orderby? Mereka disimpan dalam database sejauh yang saya tahu. Bahkan jika saya menghapus hubungan.

Menindaklanjuti ini, itu bukan masalah dengan Pod melainkan masalah dengan MySQL.

Untuk alasan apa pun, ketika Anda melakukan ORDER BY bidang yang digabungkan, itu tidak akan mengurutkan hasilnya dengan benar. Jika Anda menambahkan 'where' => 'festival.name IS NOT NULL' maka itu mulai memesan dengan benar.

Penggalian lebih lanjut akan diperlukan oleh pakar MySQL untuk menentukan mengapa hal ini terjadi dan bagaimana kami dapat menguranginya di masa mendatang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat