与My_Model的关系

时间:2013-08-02 01:39:21

标签: php codeigniter

我试图找出如何理解* Jamie Rumbelow的MY_Model *的使用,具体说明如何实现这个想法。

我正在把游戏应用放在一起。有很多用户和很多角色。每个用户可以有许多字符,但每个字符只能由一个用户控制。我有一个用户的表,其中有一个名为default_character的字段。这是由字符的id字段表示的外键。

在我的代码中,我使用以下函数调用来获取当前登录的用户。

$user_data = $this->user->get_by('username', $post_username);

我想要做的是当我这样做并且它添加了default_character字段的整数值而不是我希望它获得该字符的名称。这会是什么样的?

编辑:

由于某种原因,在尝试 swatkins 回答之后仍然只显示数据库中的数字字符串值。我想要做的是用它来从字符表中获取character_name。

user - user_id, username, default_character_id

characters - id, character_name

object(stdClass)#23 (12) {
    ["user_id"]=>
    string(5) "10003"
    ["first_name"]=>
    string(3) "tom"
    ["last_name"]=>
    string(8) "williams"
    ["username"]=>
    string(9) "twilliams"
    ["password"]=>
    string(40) "431db25cf8fe0ccf374365ae9c644c7bfdeb7399"
    ["password_hash"]=>
    string(11) "ed95d918116"
    ["email_address"]=>
    string(19) "twilliams@yahoo.com"
    ["status_id"]=>
    string(1) "2"
    ["lock_date"]=>
    string(19) "0000-00-00 00:00:00"
    ["default_character_id"]=>
    string(1) "1"
    ["created_at"]=>
    string(19) "2013-07-30 10:00:00"
    ["updated_at"]=>
    string(19) "0000-00-00 00:00:00"
}

用户模型(application / modules / user / models / user_model.php)(在MY_Controller中加载)

<?php

class User_model extends MY_Model 
{    
    public $primary_key = 'user_id';
    public $has_many = array('characters' => array('model' => 'character_model' ));

    public function __construct()
    {
        parent::__construct();
    }
}

字符模型(application / modules / character / models / character_model.php)(在控制面板控制器中加载)

<?php

class Character_model extends MY_Model 
{    
    public $belongs_to = array('user' => array('primary_key' => 'default_character_id'));

    public function __construct()
    {
        parent::__construct();
    }
}

我想知道这是否是数据库结构问题。有关这个主题的更多想法?任何帮助都会很棒。

我仍然对我做错了什么感到忧虑。有人能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

假设您已正确设置关系,可以使用with方法访问关系的子项:

https://github.com/jamierumbelow/codeigniter-base-model

// from the docs

$post = $this->post_model->with('author')
                     ->with('comments')
                     ->get(1);

echo $post->author->name;

foreach ($post->comments as $comment)
{
    echo $message;
}

因此,此博客会抓取post,其ID为1,然后抓取authorcomments数组。您可以将它们作为父对象的属性进行访问。

<强>更新

您需要在模型中建立关系。因此,您可以像这样设置usercharacter个实体:

class User_model extends MY_Model
{
  public $has_many = array('characters');
}

class Character_model extends MY_Model
{
  public $belongs_to = array('user' => array('primary_key' => 'default_character'));
}