2013-03-22 165 views
6

我是laravel的新手,並試圖用它創建一個相冊。 我的問題是,我使用的附加功能,插入用戶ID和組ID到我的數據庫,它的作品不錯,但在文檔中,它說這對附加功能Laravel雄辯多對多

例如,也許你的角色希望附加到已存在的用戶 。只需使用附加方法:

,所以我想用同樣的方式,如果album_id已經存在只是更新它,其他明智的插入THR新的,但我的問題是,它總是insters,它不檢查如果album_id已經exsits

我的模型

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

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

} 

郵功能

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 
    } 

    } 

可以請別人指出我做錯了什麼?或者我完全誤會了附加功能?

+0

順便說一句:http://area51.stackexchange.com/proposals/46607/laravel – Kriem 2013-03-22 11:42:24

+0

你發佈的鏈接怎麼樣? – 2013-03-22 12:20:31

+0

只是Laravel Stack Exchange提案的鏈接,對於那些對Laravel感興趣的人。 – Kriem 2013-03-22 12:36:10

回答

1

感謝@Collin我發現我誤會我做我這張支票昨天

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

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

我相信你誤解了attach函數。 sync函數使用attach來添加關係,但前提是關係不存在。在那裏做了什麼之後,我建議拉出一個id列表,然後只在列表中不存在時插入。

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

在旁註中,我將建議您遵循laravel的默認命名約定。關係方法應該是$ user-> albums(),因爲它們中有很多。數據透視表也應該被命名爲'album_user'。你稍後會感謝你。

2

Contains method of Laravel Collections

的laravel藏品提供了一個非常有用的方法 '包含'。它確定集合中是否存在密鑰。您可以使用$user->album來獲取您的案例中的藏品。你可以注意到這張專輯沒有任何缺陷。

工作代碼

現在,所有你需要做的就是使用contains方法。完整的代碼將會是。

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

其更清潔和'Laravel'獲得所需解決方案的方式。

+0

這很方便,但是看起來很浪費,不得不從數據庫中爲用戶提供所有相冊的全部細節。您只想知道某個特定相冊是否屬於該用戶。 – Jason 2016-04-12 11:52:36