Empfehlungen: Erweiterte Suche

unBindAll()

Anleitungen und Quellcode-Auszüge die den Start vereinfachen sollen.

unBindAll()

Beitragvon Flo » So 7. Dez 2008, 04:45

Hello,
wollte nur mal dieses bisschen Code hier Posten, mir hilft es sehr :) evt euch ja auch.
bewirkt das alle associations entfertn werden, ausser denen die man ausschließt, sehr toll wenn Applikationen wachsen :)
<?php
class AppModel extends Model {
function unbindAll($params = array()){
foreach($this->__associations as $ass){

if(!empty($this->{$ass})){
$this->__backAssociation[$ass] = $this->{$ass};

if(isset($params[$ass])){
foreach($this->{$ass} as $model => $detail){
if(!in_array($model,$params[$ass])){
$this->__backAssociation = array_merge($this->__backAssociation, $this->{$ass});
unset($this->{$ass}[$model]);
}
}
} else {
$this->__backAssociation = array_merge($this->__backAssociation, $this->{$ass});
$this->{$ass} = array();
}
}
}
return true;
}
}
?>
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: unBindAll()

Beitragvon Mathias » So 7. Dez 2008, 17:52

Vielen Dank.

Eine Sache ist allerdings sehr witzig bei dem Code
Code: Alles auswählen
as $ass

:D
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: unBindAll()

Beitragvon Firzair » Di 9. Dez 2008, 13:09

Hallo.

An dieser Stelle möchte ich das Containable-Behavior empfehlen.
Hinweis zur Nutzung (englisch): http://cakebaker.42dh.com/2008/05/18/ne ... ntainable/
Im Wesentlichen läßt es zu, dass man bei jedem find-Aufruf genau definiert, welche Assoziationen man mit ermitteln möchte und sogar, welche Felder jeweils zurückgeliefert werden.

Beispiele (aus dem Link):
Code: Alles auswählen
$post = $this->Post->find('all', array('contain' => false));

Liefert nur die posts-Tabelle zurück.

Code: Alles auswählen
$post = $this->Post->find('all', array('contain' => 'Tag'));

Liefert die posts mit tags zurück.

Code: Alles auswählen
$post = $this->Post->find('all', array('contain' => 'Comment.author'));

Liefert die Posts mit Kommentaren (nur id und Autor).

Dies hilft dabei, sehr einfach die DB-Last zu reduzieren. Ich hab das Behavior direkt in mein AppModel integriert, so dass es für alle Models zur Verfügung steht.

Eine interessante Alternative, die sich auch für HABTM-Beziehungen nutzen lassen soll, findet man übrigens hier (leider ebenfalls auf Englisch):
http://rafaelbandeira3.wordpress.com/20 ... n-your-db/
Dabei kann man dann echte Joins erzeugen, welche auch die HABTM-Tabellen berücksichtigen und man kann entsprechende WHERE-Bedingungen formulieren.

Viele Grüße
Firzair
Firzair
 
Beiträge: 2
Registriert: Di 25. Nov 2008, 09:07
CakePHP-Version: 1.2RC3


Zurück zu Tutorials und Snippets

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron