2013-03-22 32 views
6

Sono nuovo di laravel e sto provando a costruire un album di foto con esso. mio problema è che io uso la funzione di collegare per inserire l'ID utente e di gruppo id al mio database, funziona bene, ma nella documentazione che dice questo circa la funzione di collegareLaravel Eloquent molti-a-molti allegare

Per esempio, forse il ruolo che si desidero allegare all'utente già esistente. Basta usare il metodo di collegamento:

così ho voluto usarlo allo stesso modo, se il album_id esistono già basta aggiornarlo, l'altro saggio inserire thr nuova, ma il mio problema è che insters sempre, non è così controlli se il album_id exsits già

il mio modello

class User extends Eloquent 
{ 
    public static $timestamps = false; 

    public function album() 
    { 
     return $this->has_many_and_belongs_to('album', 'users_album'); 
    } 

} 

funzione post

public function post_albums() 
    { 

     $user = User::find($this->id); 

     $album_id = Input::get('album'); 

     $path = 'addons/uploads/albums/'.$this->id.'/'. $album_id . '/'; 

     $folders = array('path' => $path, 'small' => $path. 'small/', 'medium' => $path. 'medium/', ); 

     if (! is_dir($path)) 
     { 
     foreach ($folders as $folder) 
     { 
      @mkdir($folder, 0, true); 
     } 
     } 


    $sizes = array( 
     array(50 , 50 , 'crop', $folders['small'], 90), 
     array(164 , 200 , 'crop', $folders['medium'], 90), 
    ); 

    $upload = Multup::open('photos', 'image|max:3000|mimes:jpg,gif,png', $path) 
      ->sizes($sizes) 
      ->upload(); 

    if($upload) 
    { 
     $user->album()->attach($album_id); 
     return Redirect::back(); 
    } 
    else 
    { 
     // error show message remove folder 
    } 

    } 

Potrebbe piacere qualcuno che faccia capire cosa sta facendo male? O ho totalmente frainteso la funzione di attacco?

+0

A proposito: http://area51.stackexchange.com/proposals/46607/laravel – Kriem

+0

e il link che hai postato? –

+0

Solo un collegamento alla proposta di Scambio pila Laravel, per coloro che sono interessati a Laravel. – Kriem

risposta

1

Grazie @Collin ho notato che fraintendono ho fatto il mio check ieri

$album = $user->album()->where_album_id($album_id)->get(); 

     if(empty($album)) 
     { 
      $user->album()->attach($album_id); 
     } 
6

Credo che tu abbia frainteso la funzione di collegamento. La funzione di sincronizzazione usa attach per aggiungere relazioni ma solo se la relazione non esiste già. Seguendo ciò che è stato fatto lì, suggerirei di tirare una lista di ID e quindi di inserire solo se non esiste già nella lista.

$current = $user->album()->lists('album_id'); 
if (!in_array($album_id, $current)) 
{ 
    $user->album()->attach($album_id); 
} 

In una nota a margine, suggerirò di seguire la convenzione di denominazione predefinita da laravel. Il metodo di relazione dovrebbe essere $ user-> albums() perché ce ne sono molti. La tabella pivot dovrebbe anche essere denominata "album_user". Ti ringrazierai più tardi.

2

Contains method of Laravel Collections

Le collezioni laravel fornisce un metodo molto utile 'contiene'. Determina se esiste una chiave nella collezione. È possibile ottenere la raccolta nel tuo caso utilizzando $user->album. Puoi notare la differenza che l'album è senza parantesi.

codice

Lavorando Ora tutto quello che doveva fare è utilizzare il metodo contains. Il codice completo sarà.

if (!$user->album->contains($album_id) 
{ 
    $user->album()->attach($album_id); 
} 

È il modo più pulito e "Laravel" per ottenere la soluzione richiesta.

+0

Questo è utile, ma sembra inutile dover estrarre dal database tutti i dettagli di tutti gli album per l'utente. Vuoi solo sapere se un determinato album appartiene a quell'utente. – Jason

Problemi correlati