0

Here's my user Controller

public function action_create_student(){

    $view = View::forge('admin/users/create_student');

    if (Input::method() == 'POST')
    {   
        $val = Model_User::validate('create');

if ($val->run())
        {
            $newuser = Model_User::forge(array(
                'username'=> Input::post('username'),
                'firstname' =>Input::post('firstname'),
                'middlename'=> Input::post('middlename'),
                'lastname'=> Input::post('lastname'),
                'password'=> Auth::instance()->hash_password(Input::post('password')),
                'phone_number'=> Input::post('phone_number'),
                'group'=> Input::post('group'),
                'email'=> Input::post('email'),
                'course' =>Input::post('course'),
            ));
            $useruser = Model_Student::forge(array(
                'course' =>Input::post('course'),
                'user_id' =>Input::post('user_id'),
            ));
            $useruser->save();
            $newuser->save();

I want to add user and I want the user_id (foreign key) is equal to the id (primary key) in user table

Here's my user's Model

<?php
class Model_User extends \Orm\Model
{

protected static $_properties = array(
    'id',
    'username',
    'password',
    'firstname',
    'middlename',
    'lastname',
    'phone_number',
    'group',
    'email',
    'created_at',
    'updated_at',

);
protected static $_has_one = array(
    'student' => array(
        'model_to' => 'Model_Student',
        'key_from' => 'id',
        'key_to' => 'user_id',
        'cascade_delete' => true,
    ),
);


// public function get_full_name () {
//  return $this->'firstname' . ' ' . $this->'lastname';
//  static::method_exists(object, method_name());
// }
protected static $_observers = array(
    'Orm\Observer_CreatedAt' => array(
        'events' => array('before_insert'),
        'mysql_timestamp' => false,
    ),
    'Orm\Observer_UpdatedAt' => array(
        'events' => array('before_save'),
        'mysql_timestamp' => false,
    ),
);


public static function validate($factory)
{
    $val = Validation::forge($factory);
    $val->add_field('username', 'Username', 'required|max_length[50]');
    $val->add_field('password', 'Password', 'required|max_length[255]');
    $val->add_field('firstname', 'Firstname', 'required|max_length[50]');
    $val->add_field('middlename', 'Middlename', 'required|max_length[255]');
    $val->add_field('lastname', 'Lastname', 'required|max_length[255]');
    $val->add_field('phone_number', 'Phone Number', 'required|valid_string[numeric]');
    $val->add_field('group', 'Group', 'required|valid_string[numeric]');
    $val->add_field('email', 'Email', 'required|valid_email|max_length[255]');
    return $val;
}
}

Here's my student Model

class Model_Student extends \Orm\Model
{

protected static $_properties = array(
    'id',
    'course',
    'user_id',
    'created_at',
    'updated_at',
);

/**
 * @var array   belongs_to relationships
 */
protected static $_belongs_to = array(
    'user' => array(
        'model_to' => 'Model_User',
        'key_from' => 'user_id',
        'key_to'   => 'id',
    ),
);


protected static $_observers = array(
    'Orm\Observer_CreatedAt' => array(
        'events' => array('before_insert'),
        'mysql_timestamp' => false,
    ),
    'Orm\Observer_UpdatedAt' => array(
        'events' => array('before_save'),
        'mysql_timestamp' => false,
    ),
);

public static function validate($factory)
{
    $val = Validation::forge($factory);
    $val->add_field('course', 'Course', 'required|max_length[50]');
    $val->add_field('user_id', 'User_id',  'required|valid_string[numeric]');
    return $val;
}
}

Help me get rid of this one need help thanks :)

Pete
  • 57,112
  • 28
  • 117
  • 166

2 Answers2

0

In your controller you can simply do

$newuser->student = $useruser;
$newuser->save();

instead of

$newuser->save();
$useruser->save();

Providing you have your relations set up correctly, which it appears that you do, the ORM will automatically populate the key for you on save. Basic code samples can be found in the documentation: http://fuelphp.com/docs/packages/orm/relations/has_one.html#/has_one

Emlyn
  • 852
  • 6
  • 16
0

Now I will answer my question :)

  $newuser = Model_User::forge(array(
                'username'=> Input::post('username'),
                'firstname' =>Input::post('firstname'),
                'middlename'=> Input::post('middlename'),
                'lastname'=> Input::post('lastname'),
                'password'=> Auth::instance()->hash_password(Input::post('password')),
                'phone_number'=> Input::post('phone_number'),
                'group'=> Input::post('group'),
                'email'=> Input::post('email'),
                'course' =>Input::post('course'),
            ));
            $newuser->student = Model_Student::forge(array(
                'course' =>Input::post('course'),
            ));

            if($newuser->save()){
                Session::set_flash('success', e('Added user'));
                Response::redirect('admin/users');
            }

You just need to save the field in the student except to the user_id, it will be automatically save when you join it using orm.