0

*Jamie Rumbelow の MY_Model* の使用を理解する方法、特にこのアイデアを実装する方法を見つけようとしています。

ゲームアプリをまとめています。ユーザー数もキャラ数も多い。各ユーザーは複数のキャラクターを持つことができますが、1 人のユーザーが操作できるのは各キャラクターのみです。というフィールドを持つユーザーのテーブルがあります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();
    }
}

Character Model(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;
}

したがって、このブログpostでは の ID を持つ を取得し、さらに と の配列1も取得します。親オブジェクトのプロパティとしてアクセスします。authorcomments

アップデート

モデルで関係を設定する必要があります。userしたがって、エンティティとcharacterエンティティを次のように設定します。

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 に答える