Temat: Znów search

Cześć,
Chciałbym zapytać, jak wydobyć dane z bazy ale nie na zasadzie asocjacji, tylko "niezależnie".
Dokładniej - mam 2 tabele ( Page i Subpage ) obie tabele mają kolumny body, czyli Page.body i Subpage.body.
Page hasMany Subpage.

I teraz dając find() coś tam, otrzymam dane z Page.body i należące do Page dane z Subpage.body.

Ale ja chcę przeszukać tabele Page.body i Subpage.body bez asocjacji, czyli szukam na przykład słowa "fryzjer: i chcę wszystkie dane z tych dwóch tabel, a nie tylko te, które są połączone foreign key.

Dziękuję za pomoc.
Marek.
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Znów search

W AppModel najlepiej (ale może być w każdym modelu oddzielnie) dodać
public $recursive = -1;
To dobra praktyka. Dzięki temu w każdym find dostajesz dane tylko danego modelu, a jeśli chcesz dostać dane z modeli zależnych to musisz to określić w contain.

Temat: Znów search

Dziękuję Kamil, jak zawsze jesteś 'na posterunku' :)
Tylko widzisz, chyba nie wiesz co chcę zrobić.

( kod w modelu a nie kontrolerze stąd brak $this->Page )

Otóż, mają 2 modele ( Page, Subpage) które są ( Page hasmany Subpage ) i ( Subpage belongs to Page ), chcę przeszukać bazę danych szukając danej frazy, tylko że ten kod:

public function searches($data) {
$this->contain('Subpage');
$this->recursive = -1;
return $this->find('all',array('conditions'=>array('body LIKE'=>"%$data%")));
}

Znajdzie tylko w Page. Subpage nie znajdzie, chyba że Page ma jakieś Subpage
Czyli jest to typowa asocjacja.

Ja chcę przeszukać tabele pages i subpages szukając frazy $data, ale bez powiązania. Czyli wszystkie pages i subpages, a nie tylko pages i subpages które mają page_id = id .

Dziękuję za wskazówkę.

PS: czy nie nalezy tu użyć $options['joins'] ?

PS2 : chyba nie, bo tu napisano że łączy powiązane tabele, no w sumie to ja mam też połączone, ale co gdyby nie były połączone ?
"Joining tables
In SQL you can combine related tables using the JOIN statement. This allows you to perform complex searches across multiples tables (i.e: search posts given several tags)."Ten post został edytowany przez Autora dnia 21.02.14 o godzinie 12:52
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Znów search

Jak nie masz rozwiązania cejkowego, zrób na oklep:


public function searches($data) {
$this->recursive = -1;
$pages = $this->find('all',array('conditions'=>array('body LIKE'=>"%$data%"),'fields'=>array('body')));
$subpages = $this->Subpage->find('all',array('conditions'=>array('body LIKE'=>"%$data%"),'fields'=>array('body')));
$res = Hash::merge($pages,$subpages);
return $res;
}


kontroler

$data = $this->Page->searches($this->request->data[coś[);


To tak na szybko, przyda się fine tuning bo DRY to nie jest, ale będzie działać.

Temat: Znów search

Tak zrobię, 2 dni się męczę, a faktycznie rozwiązanie na 2 minuty pisania.
Dziękuję.
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów search

solr daje niezłego kopa

Następna dyskusja:

Znów Route




Wyślij zaproszenie do