WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   CakePHP + query + joining tables (https://www.wn.se/forum/showthread.php?t=38338)

robert.liljedahl 2009-08-06 21:36

Hejsan. För de av er som som vet vem jag är så vet ni att det i huvudsak är en sak jag kan; Frontend. HTML+CSS+JS. Nu har tydligen min situation förändrats och jag ska lära mig CakePHP -utan- någon ordentlig PHP-/OOP-/MySQL-bakgrund. Alltså ska en gammal hund läras sittas. Fast lite bakvänt.
De var länge sedan jag kände mig såhär bortkommen och vilsen, samtidigt som jag på något sjukt sätt njuter lite av det.

Här min situation, och jag skulle bli otroligt tacksam för hjälp.

Article hasAndBelongsToMany Category, Location
Paper hasAndBelongsToMany Category, Location
Article belongsTo Paper
Paper hasMany Article

Joining tables:
articles_categories
articles_locations
categories_papers
locations_papers

Jag vill ändra $cond (eller göra de ändringar som är nödvändiga) så att jag får alla artiklar som:
har MINST en Category som matchar någon av Papers categories
OCH
har MINST en Location som matchar någon av Papers locations.

Ni kan ignorera det som just nu står i $cond.

$paper['Category'] innehåller följande 'categories' för Paper:
Kod:

Array
(
  [0] => Array
    (
      [id] => 1
      [title] => Turism
      [slug] => Turism
      [parent_id] =>
      [lft] => 1
      [rght] => 2
    )
 
  [1] => Array
    (
      [id] => 2
      [title] => Fritid
      [slug] => Fritid
      [parent_id] =>
      [lft] => 23
      [rght] => 24
    )
    ....
)

$paper['Location'] innehåller följande 'locations' för Paper:
Kod:


Array
(
  [0] => Array
    (
      [id] => 1
      [title] => Blekinge
      [slug] => blekinge
      [parent_id] =>
      [lft] => 1
      [rght] => 2
    )
 
  [1] => Array
    (
      [id] => 3
      [title] => Dalarna
      [slug] => dalarna
      [parent_id] =>
      [lft] => 25
      [rght] => 26
    )
    ...
)

ArticlesController:
Kod:

function archive($paper = null) {
    if (!$paper) {
      $this->Session->setFlash(__('Invalid Paper.', true));
      $this->redirect(array('action'=>'index'));
    }
   
    $paper = $this->Article->Paper->findBySlug($paper);
    $this->Article->recursive = 0;
    $cond = array("Article.paper_id" => $paper['Paper']['id']);
   
    $this->set('articles', $this->paginate('Article', $cond));
  }

Jag har suttit bokstavligen hela dagen och försökt lösa det här. Har provat en massa olika saker. Har läst om Ad-hoc, att använda bindModel mm.. men jag får inte till det.

Tack på förhand.
/Robert

Perben 2009-08-06 21:47

Kan du ställa ett riktigt (normalt) SQL query direkt eller måste du använda ramverket? Vansinnigt hur man kan komplicera saker med ramverk.. alltid lika förbluffande.

robert.liljedahl 2009-08-06 21:57

Citat:

Originally posted by Perben@Aug 6 2009, 21:47
Kan du ställa ett riktigt (normalt) SQL query direkt eller måste du använda ramverket? Vansinnigt hur man kan komplicera saker med ramverk.. alltid lika förbluffande.

Jo jag -kan- men kommer då tappa en hel del annan funktionalitet på köpet vilket i slutändan ger mig än mer jobb. Så det är inte att rekommendera. Däremot så kanske jag med lite flyt kan översätta en komplett sql-query till cake's syntax.

andi 2009-08-06 23:27

Har inte stenkoll på vad du är ute efter men kan detta vara något?

http://www.volved.com/index.php/2009/03/26...ssociated-data/


Alla tider är GMT +2. Klockan är nu 01:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson