0

我试图找出如何理解 *Jamie Rumbelow 的 MY_Model* 的使用,特别是如何实现这个想法。

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

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

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

我想做的是,当我这样做时,它会从 default_character 字段中添加整数值,而不是我希望它去获取该字符的名称。这会是什么样子?

编辑 :

出于某种原因,在尝试swatkins下面的答案后,它仍然只显示数据库中的数字字符串值。我想要做的是用它从字符表中获取字符名称。

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

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

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

4

1 回答 1

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

所以,这个博客抓取了postid 的1,然后也抓取了 的author和 数组comments。您可以将它们作为父对象的属性来访问。

更新

您需要在模型中建立关系。因此,您将像这样设置您的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'));
}
于 2013-08-02T04:27:52.550 回答