Tag pencarian Cakephp 3

Dari Cakebook kami mendapatkan contoh kerja ini:

public function findTagged(Query $query, array $options) {
  return $this->find()
    ->distinct(['Articles.id'])
    ->matching('Tags', function ($q) use ($options) {
    if (empty($options['tags'])) {
        return $q->where(['Tags.title IS' => null]);
    }
    return $q->where(['Tags.title IN' => $options['tags']]);
  });
}

Misalnya dengan alamat artikel/tagged/test/new, maka akan ditemukan artikel dengan tag "test" ATAU tag "new". Saya ingin memodifikasi kode ini dengan cara CakePHP, untuk mendapatkan artikel dengan tag "test" DAN tag "baru".

Apakah Anda punya ide?


person nexequ    schedule 11.03.2017    source sumber
comment
Sepertinya Anda sedang mencari stackoverflow.com/questions/30938440/   -  person ndm    schedule 13.03.2017
comment
Lihat ini menggunakan plugin find(tagged) dan friendsofcake/search :)   -  person mark    schedule 19.07.2018


Jawaban (1)


Inilah solusi untuk Pertanyaan Anda : Perbarui Kueri pencari Anda seperti di bawah ini -

public function findTagged(Query $query, array $options){
     $this->opt = $options['tags'];
     $articles = $this->find()
        ->select(['Articles.id', 'Articles.url', 'Articles.title', 'Articles.description'])
        ->matching('Tags', function ($query) {
            return $query->where(['Tags.title IN' =>$this->opt]);
        })->group(['Articles.id'])
        ->having([
            $this->Users->query()->newExpr('COUNT(DISTINCT Tags.title) = '.count($this->opt))
        ]);

    return $articles;
}

Kueri di atas hanya akan mengembalikan matching tags untuk Artikel.

person Sumon Sarker    schedule 16.03.2017