簡體   English   中英

Laravel Eloquent多對多附加

[英]Laravel Eloquent many-to-many attach

我是laravel的新手,並試圖用它制作相冊。 我的問題是我使用attach函數將用戶ID和組ID插入我的數據庫,它工作正常,但在文檔中它說明了關於attach函數

例如,您希望附加到用戶的角色可能已存在。 只需使用attach方法:

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

我的模特

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
     }   

   }

可以請有人指出我做錯了什么? 或者我完全誤解了附加功能?

我相信你誤解了附加功能。 同步功能使用附加來添加關系,但前提是該關系尚不存在。 按照那里所做的,我建議拉一個id列表,然后只插入列表中尚不存在的內容。

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

另外,我建議您遵循laravel的默認命名約定。 關系方法應該是$ user-> albums(),因為它們中有很多。 數據透視表也應命名為“album_user”。 你以后會感謝自己。

包含Laravel Collections的方法

laravel集合提供了一種非常有用的方法'包含'。 它確定集合中是否存在密鑰。 你可以使用$user->album獲得你的收藏。 你可以注意到專輯沒有副作用的區別。

工作代碼

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

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

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

謝謝@Collin我注意到我誤解了我昨天做了我的支票

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM