Ich bastel momantan an einer Datenbank in der Lieder und Akkorde gespeichert werden sollen. Untergeordnet den Alben und Artisten der Lieder.
Folgende Tabellen in der Datenbank sind für dieses Thema relevant (vereinfacht):
- artists
- id
- name
- albums
- id
- name
- lyrics
- id
- name
- favorites
- id
- parent_id
- user_id
- artist_id
- album_id
- lyric_id
- name
- users
- id
- username
- password
Nun soll ein Benutzer die Möglichkeit erhalten einen Artisten, ein Album oder aber auch ein Lied(Lyric) als Favourit abspeichern zu könne, jeweils in der gleichen Tabelle.
Nun wird mir eine Liste von Liedern (Lyrics) angezeigt in der hinter jedem Namen ein Link ist, der es ermöglichen soll das jeweilige Lied in den Favouriten zu speichern. Das ganze auch bei den Alben und auch bei den Artisten.
Ich bin jetzt so rangegangen das ich im FavoritesController eine Methode "add" habe, in der ich erstmal abfrage was gespeichert werden soll -> artist/album/lyric. Da ich der add-Methode die jeweilige id übergebe, wird diese dann jeweils gespeichert.
Ich dachte das die Links dann jeweils so aussehen könnten:
- Code: Alles auswählen
- <a title="Add Artist to Favorites" href="favorites/add/artist/123">+</a>
<a title="Add Albumto Favorites" href="favorites/add/album/123">+</a>
<a title="Add Lyric to Favorites" href="favorites/add/lyric/123">+</a>
oder
- Code: Alles auswählen
- <a title="Add Artist to Favorites" href="favorites/add/artist_id/123">+</a>
<a title="Add Albumto Favorites" href="favorites/add/album_id/123">+</a>
<a title="Add Lyric to Favorites" href="favorites/add/lyric_id/123">+</a>
Die user_id wird dann aus der Session des gerade angemeldeten Benutzers gelesen und mit abgespeichert.
Ich weiß nun aber nicht wie ich die Daten auslesen kann, bzw dann ans view übergebe. Ich hab auch schon überlegt das ganze einfach mittels $this->redirect( $this->referer ); in der add-Methode wieder an die vorherige Seite weiterzuleiten.
Da ich aber in der favorites-Tabelle eine parent_id gespeichert habe, will ich auch sozusagen Listen anlegen lassen, denen ich dann die jeweiligen Lieder zuordnen kann.
Beispielsweise so:
- Rock
- 1. Lied
- 2. Lied
- 3. Lied
- Metal
- 1. Lied
- 2. Lied
- 3. Lied
Mir fehlt da jetzt leider so der Leitgedanke, son kleiner Anschups. Vielleicht muss ich die Listen auch in eine eigene Tabelle abspeichern. Aber im Prinzip reicht mir erstmal wenn ich es irgendwie schaffe die Parameter in der URL übergeben kann und das ganze dann in der Datenbank speichern kann.
Kann mir da jemand einen kleinen Wink mit dem Zaunpfahl geben?
NACHTRAG: So in etwa sähen meine Überlegungen der add-Methode aus.
- Code: Alles auswählen
- function add( $id = null )
{
if ( $id )
{
switch( /* 1. Parameter der URL */ )
{
case 'artist':
$this->data['Favorite']['user_id'] = $this->Auth->user('id');
$this->data['Favorite']['artist_id'] = /* 2. Parameter der URL */;
$this->data['Favorite']['album_id'] = null;
$this->data['Favorite']['lyric_id'] = null;
break;
case 'album':
$this->data['Favorite']['user_id'] = $this->Auth->user('id');
$this->data['Favorite']['artist_id'] = null;
$this->data['Favorite']['album_id'] = /* 2. Parameter der URL */;
$this->data['Favorite']['lyric_id'] = null;
break;
case 'lyric':
$this->data['Favorite']['user_id'] = $this->Auth->user('id');
$this->data['Favorite']['artist_id'] = null;
$this->data['Favorite']['album_id'] = null;
$this->data['Favorite']['lyric_id'] = /* 2. Parameter der URL */;
break;
}
if( $this->Favorite->save($this->data) )
{
$this->Session->setFlash(__('The favorite has been saved', true));
//$this->redirect( $this->referer() );
}
else
{
$this->Session->setFlash(__('The favorite could not be saved. Please, try again.', true));
}
}
else
{
$this->Session->setFlash(__('Invalid favorite', true));
$this->redirect( $this->referer() );
}
}