0

我正在尝试为我的用户创建一个更加动态的系统,实现他们在需要时创建每个必要信息的方法。(对不起,如果我的英语很弱)

首先,我有一个名为 User 的表,如下所示:

User:

id   |   name   |    login   |     password

1    |   Rose   |  rose.120  |     897763
2    |   John   |  john.red  |     120347
3    |   Mark   |  mark.foo  |     385598

另一个表包含每个用户的一些信息:

User_info:

id  |  user_id  |  info_name      |   value          |  required  |  order

6   |   1       | Telephone       |  555-4083        |   yes      |   2 
7   |   1       | Email           |  rose.120@g.com  |   yes      |   1 
8   |   1       | Another E-mail  |  rose.mg@fc.com  |   no       |   3 

当我从数据库中获取这些值时,如何有效地设置 PHP 对象或这些值的数组。
我尝试创建一个 mysql_query 并以此结果在对象中创建一个循环,并为任何行创建一个 WHERE 子句到用户 ID。(我正在使用 CodeIgniter)

    if( $user != false ) $this->getUser();
    foreach( $this->user->result() as $row ) {
        $this->db->where('user_id', $row->id);
    }
    $this->db->from('user_info');
     ...

当我有这个对象时,我需要将 User_info 行放在用户对象中。正确的?
我只是好奇这是否是这样做的好方法,或者我的方法不对。
我希望这很清楚。
谢谢。

4

3 回答 3

1

基本上,是的。但是,您可以设置您的模型user_info来定义一种从您的表和user表中检索信息的方法。这些方面的东西:

// in user_model.php
function get_user_with_info() {
  $user = $this->getUser();
  $user['info'] = $this->db->where('user_id', $row->id)->from('user_info')->row();

  return $user;
}

如果您打算经常进行此查询,您将很快遇到N+1 问题。Codeigniter 中更好的选择可能是joinget_users函数中使用表:

function get_users() {
  $this->db->select('*')
  $this->db->from('user');
  $this->db->join('user_info', 'user.id = user_info.user_id');

  $results = $this->db->result();
  $users = [];
  foreach ($results as $result) {
    $user_id = $result['user_id'];
    if (!isset($users[$user_id])) {
      $users[$user_id] = array(
        'id' => $user_id,
        'info' => array(
          // add info fields from first result
        )
      );
    } else {
      $users[$user_id]['info'][] = array( 
        // add additional info fields
      );
    }
  }
  return $users;
}

您将需要调整细节,但希望这能给您一个开始的地方。

于 2012-04-25T04:53:49.583 回答
0

While using code codeIgniter, make a function in your model file and put your code. Then, in the controller, call this function in the model and send your required parameter. You are using codeigniter then you have to follow the architecture too.

于 2012-04-25T04:47:42.473 回答
0

不要忘记,这样你必须在用户对象中使用动态数组。而不是命名为“电话”、“电子邮件”等的字段,您可以通过 $user->Telephone、$user->Email 和其他方式访问(这是一个简单的方法,我认为是一个好方法),您必须创建动态具有对 $info_name->$value 的数组。在“用户”对象中,您必须创建附加功能,解析每个属性 $info_name。这更灵活,但更复杂。

所以我认为,你必须在灵活性和复杂性之间找到中庸之道。

于 2012-04-25T04:55:52.040 回答