【问题标题】:Relationships With My_Model与 My_Model 的关系
【发布时间】:2013-08-03 03:55:22
【问题描述】:

我试图找出如何理解 *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();
    }
}

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

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

【问题讨论】:

  • 对不起这个无用的评论,但这是我在 Stackoverflow 中见过的最好的问题标题之一

标签: php codeigniter


【解决方案1】:

假设您已正确设置关系,您可以使用 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'));
}

【讨论】:

  • 我仍在为此苦苦挣扎,因为我不明白它如何知道将这两者与 users.default_character 和 characters.id 结合起来。
  • 你告诉它如何加入两者。我已经更新了解释如何建立这些关系的答案。
  • 出于某种原因,我仍在为此苦苦挣扎。我在上面做了修改。
  • 好的,所以当你这样做时:$user = $this-&gt;user_model-&gt;with('character')-&gt;get(1); --- print_r($user); 显示什么?
  • 它仍然显示整数值并且没有得到应该添加的字符的名称
猜你喜欢
  • 2023-03-16
  • 2013-02-17
  • 1970-01-01
  • 2012-10-07
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2013-06-08
相关资源
最近更新 更多