2013-03-22 6 views
6

Я новичок в laravel и пытаюсь создать с ним фотоальбом. Моя проблема заключается в том, что я использую функцию придает вставить идентификатор пользователя и идентификатор группы в мою базу данных, она работает нормально, но в документации говорит, что это о функции прикрепленияLaravel Eloquent many-to-many прилагается

Например, возможно, роли, которую вы хочу приложить к пользователю уже существует. Просто используйте присоединять метод:

Так я хотел бы использовать его таким же образом, если album_id уже существуют просто обновить его, другие мудрые вставить Чет новый, но моя проблема в том, что всегда 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 
    } 

    } 

Может ли кто-нибудь указать, что я делаю неправильно? Или я совершенно неправильно понял функцию attach?

+0

Кстати: http://area51.stackexchange.com/proposals/46607/laravel – Kriem

+0

как насчет ссылки вы отправили? –

+0

Просто ссылка на предложение обмена Laravel Stack Exchange для тех, кто интересуется Laravel. – Kriem

ответ

1

Благодаря @Collin я заметил, что я неправильно я вчера

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

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

Я считаю, что вы неправильно поняли функцию attach. Функция синхронизации использует attach для добавления отношений, но только если отношения еще не существуют. После того, что было сделано там, я бы предложил вытащить список идентификаторов только тогда, если он еще не существует в списке.

$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); 
} 

Его более чистый и «ларавельный» способ получения требуемого решения.

+0

Это удобно, но кажется бесполезным, чтобы вытащить полную информацию обо всех альбомах для пользователя из базы данных. Вы только хотите знать, принадлежит ли конкретный альбом этому пользователю. – Jason