2016-06-27 4 views
0

Voici mon contrôleur utilisateurFuelPHP Comment remplir automatiquement une clé étrangère basée sur la clé primaire

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(); 

Je veux ajouter un utilisateur et je veux la user_id (clé étrangère) est égale à l'identifiant (clé primaire) dans table utilisateur

Voici le modèle de mon utilisateur

<?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; 
} 
} 

Voici mon élève modèle

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

Aidez-moi à se débarrasser de celui-ci ont besoin d'aide merci :)

Répondre

0

Dans votre contrôleur, vous pouvez simplement faire

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

au lieu de

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

À condition d'avoir vos relations ensemble correctement, ce qui semble être le cas, l'ORM remplira automatiquement la clé lors de la sauvegarde. Des échantillons de code de base se trouvent dans la documentation: http://fuelphp.com/docs/packages/orm/relations/has_one.html#/has_one

0

Maintenant, je vais répondre à ma 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'); 
      } 

Vous avez juste besoin d'enregistrer le champ de l'étudiant, sauf dans la user_id, il sera automatiquement enregistrer quand vous le rejoignez en utilisant orm.