0

Cakephp のビューでユーザー名にアクセスしようとしています。ユーザーIDが与えられ、それを使用して、別のテーブルに保存されているユーザー名を検索する必要があります。

表示を取得しているテーブルはメッセージであり、次のとおりです

id |  title | message | from_user  | to_user | date

ユーザー名を含む users テーブル

id | username | email | password

とにかく、メッセージで from_user のユーザー名を調べるにはどうすればよいですか? 私はまだケーキに慣れているので、実際にクエリを書かずに「結合」ステートメントを作成する方法がわかりません。

コントローラーのアクションからユーザー名を送信する必要がありますか、それともビューから送信しても問題ありませんか?

編集-動作するようになりました

ここに私のインデックス関数があります

public function index() {

  $options['joins'] = array(
    array('table' => 'Users',
        'type' => 'inner',
            'fields' => array('user.username'),
        'conditions' => array(
            'Message.from_user = User.id',
            'alias' => 'user_id')
    )
);

$message = $this->Message->find('all', $options);

$this->set('messages', $message);
}

これをメッセージコントローラーに追加したところ、ユーザー名が表示されるようになりましたが、最初のメッセージのみです。それ以外はすべて空白です。

public $belongsTo = array('User');
4

2 に答える 2

1

Message モデルで関係を再定義する必要があります:

public $belongsTo = array(
    'Sender' => array(
        'className' => 'User',
        'foreignKey' => 'from_user'
    ),
    'Recipient' => array(
        'className' => 'User',
        'foreignKey' => 'to_user'
    )
);
于 2012-08-06T06:51:46.017 に答える
0

格納可能な動作を使用して、そのレコードを取得できます。私がしていることは、AppModel に動作を追加し、AppModel で再帰を -1 に設定することです。

次に、あなたのread()呼び出しは

public function view($id) {
    $message = $this->Message->find('first', array(
        'conditions' => array('Message.id' => $id),
        'contain' => array(
            'FromUser' => array('fields' => array('FromUser.username')),
        ),
    ));
    $this->set('message', $message'); // or just $this->set(compact('message'));
}

あなたの見解では:

$message['FromUser']['username'];

debug($message);ビューまたはコントローラーで を実行して、変数の内部とその構造を正確に確認することもできます。

関係が正しく設定されていると仮定すると、メッセージ レコードに関連付けられた FromUser.username フィールドが取得されます。

コンテイン可能の詳細: http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html (2.x) およびhttp://book.cakephp.org/view/1323/Containable (1.3 ) )

于 2012-08-05T01:18:17.653 に答える