Afaik, associate works from the belongsTo side of the relationship, for instance you can associate an author with a book like:
//this sets the author_id (the parent model) on the book table
$book->author()->associate($someAuthorModelInstance);
//we still need to save the $book
$book->save();
sync can be used to synchronize the either side of a belongsToMany relationship, by default it drops all the relations and just keep those provided as the arguments:
//this will drop all the existing roles except the roles with id 1,2,3. If these ids don't exist it will attach them (still dropping the existing ones).
$user->roles()->sync([1,2,3]);
//the default behaviour can be changed by passing a 'false' as a second argument.
//this will attach the roles with ids 1,2,3 without affecting the existing roles.
//in this mode sync behaves similar to the attach method.
$user->roles()->sync([1,2,3], false);
Usman.