The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Foorum::ResultSet::User - User object

FUNCTION

get
  $schema->resultset('User')->get( { user_id => ? } );
  $c->model('DBIC::User')->get( { username => ? } );
  $c->model('DBIC::User')->get( { email => ? } );

get() do not query database directly, it try to get from cache, if not exists, get_from_db() and set cache. return is a hashref: (we may call it $user_obj below)

  {
    user_id  => 1,
    username => 'fayland',
    # etc. from user table columns
    details  => {
        birthday => '1984-02-06',
        gtalk    => 'fayland'
        # etc. from user_details table columns
    },
    roles    => {
        1 => { admin => 1 },
        site => { admin => 1 },
        # etc. from user_roles, $field => { $role => 1 }
    }
    profile_photo => {
        type  => 'upload',
        value => 10,
        # etc. from user_profile_photo table columns
        upload => {
            upload_id => 10,
            filename  => 'fayland.jpg',
            # etc. from upload table columns
        }
    }
  }
get_multi
  $schema->resultset('User')->get_multi( user_id => [1, 2, 3]  );
  $c->model('DBIC::User')->get_multi( username => ['fayland', 'testman'] );

get_multi() is to ease a loop for many users. if cache backend is memcached, it would use $memcached->get_multi(); to get cached user, and use get_from_db() to missing users. return is a hashref:

  # $user_obj is the user hash above
  1 => $user_obj,
  2 => $user_obj,
  # or
  fayland => $user_obj,
  testman => $user_obj,

(TODO: we may use { user_id => { 'IN' => \@user_ids } } for missing users.)

get_from_db()
  $schema->resultset('User')->get_from_db( { user_id => ? } );
  $c->model('DBIC::User')->get_from_db( { username => ? } );
  $c->model('DBIC::User')->get_from_db( { email => ? } );

query db directly. return $user_obj

update_user()
  $c->model('DBIC::User')->update_user( $user_obj, { update_column => $value } );

the difference between $row->update of DBIx::Class is that it delete cache.

delete_cache_by_user()
  $schema->resultset('User')->delete_cache_by_user( $user_obj);
delete_cache_by_user_cond
  $schema->resultset('User')->delete_cache_by_user_cond( { user_id => ? } );
  $c->model('DBIC::User')->delete_cache_by_user_cond( { username => ? } );
  $c->model('DBIC::User')->delete_cache_by_user_cond( { email => ? } );
update_threads_and_replies
  $schema->resultset('User')->update_threads_and_replies($user);

get the correct 'threads' and 'replies' and update for user

get_user_settings
  $c->model('DBIC::User')->get_user_settings( $user_obj);

get records from user_settings table. return is hashref

  {
    send_starred_notification => 'N',
  }

AUTHOR

Fayland Lam <fayland at gmail.com>