Also angenommen ich habe folgende Tabellen:
[sql]
±------+ ±------------+ ±-------+
| Image | | ImageViewer | | Viewer |
±------+ ±------------+ ±-------+
| id | | imageId | | id |
±------+ | viewerId | | ip |
+-------------+ | time |
+--------+
[/sql]
Angenommen meine Models sehen so aus:
class Image extends CActiveRecord
{
public function relations()
{
return array(
'viewer' => array(self::HAS_MANY, 'ImageViewer', 'imageId)'),
);
}
}
class ImageViewer extends CActiveRecord
{
public function relations()
{
return array(
'image' => array(self::BELONGS_TO, 'Image', 'imageId',),
'viewer' => array(self::HAS_MANY, 'Viewer', 'viewerId)'),
);
}
}
class Viewer extends CActiveRecord
{
public function relations()
{
return array(
'views' => array(self::HAS_MANY, 'ImageViewer', 'viewerId)'),
);
}
}
[list=1]
[*]So. Wenn jetzt ein Besucher sich ein Bild anschaut soll überprüft werden ob der Besucher innerhalb der letzten 24 Stunden bereits andere Bilder angesehen hat. Wenn nein soll der Besucher angelegt werden.
(Klartext: Wenn die IP-Adresse innerhalb der letzten 24 Stunden nicht als Besucher aufgetaucht ist, wird ein neuer Eintrag in der Tabelle Viewer erstellt)
[*]Danach soll überprüft werden ob er genau DIESES Bild schoneinmal gesehen hat. Wenn nicht soll ein entsprechender Eintrag in der Zwischentabelle erfolgen.
(Klartext: Wenn ImageViewer(imageId, viewerId) schon existiert muss/darf nichts passieren. Sonst den Eintrag einfügen)
[/list]
Aber irgentwie habe ich das Gefühl dass das keine Aufgabe für den Controller ist, sondern vielmehr für das Model. Ich weiß nur nich wie ich das mit Yii umsetzen kann?
Also #1 würde ich noch im Controller umsetzen:
// Die nötigen scopes vorrausgesetzt
if(Viewer::model()->last24h()->findByAttributes(array('ip' => Yii::app()->getRequest()->userHostAddress))->count() == 0)
{
$viewer = // ... Neuen viewer anlegen
}
Aber kann man #2 nicht irgentwie im model umsetzen? Ich meine, ich habe grade irgentwo einen riesen Denkfehler. Denn auf die "Pflege" der Zwischentabellen sollte ich doch eigentlich mit activerecord verzichten können - oder?!