1

ユーザーが他のユーザーと友達になれるアプリを CakePHP で作成しました。ユーザーにはプロファイルがあり、友情は友人テーブルのユーザー ID 間でリンクされています (モデルはさらに下にあります)。

FriendsController でユーザー名を渡し、次のメソッドを使用してユーザーのフレンドを取得します。このメソッドはユーザー モデルにあり$this->User->getFriends($username);、FriendsController で呼び出されることに注意してください。

function getFriends($username) {
        //Start by getting User's ID
        $user = $this->find(
            'first',
            array(
                'conditions' => array(
                    'User.username' => $username
                )
            )
        );


        $profileAndFriends = $this->Profile->find(
            'first',  //Because User hasOne Profile, so we'll fetch this one profile.
            array(
                'conditions' => array(
                    'Profile.user_id' => $user['User']['id']
                ),
                'contain' => array(
                    'UserFrom' => array(
                        'conditions' => array(
                            'status' => 1
                        )
                    ),
                    'UserTo' => array(
                        'conditions' => array(
                            'status' => 1
                        )
                    )
                )             
            )
        );
        return $profileAndFriends;
    }

私のユーザーモデル:

class User extends AppModel { public $name = 'User';

public $hasOne = 'Profile';

public $hasMany = array(
    'UserFrom'=>array(
        'className'=>'Friend',
        'foreignKey'=>'user_from'
    ),
    'UserTo'=>array(
        'className'=>'Friend',
        'foreignKey'=>'user_to'
    )
);

}

と私のプロファイルモデル:

class Profile extends AppModel
{
    public $name = 'Profile';

    public $belongsTo = 'User';
}

と Friend モデル:

class Friend extends AppModel
{
    var $name = 'Friend';

    public $belongsTo = array(
        'UserFrom'=>array(
            'className'=>'User',
            'foreignKey'=>'user_from'
        ),
        'UserTo'=>array(
            'className'=>'User',
            'foreignKey'=>'user_to'
        )
    );
}

だから私の見解では:

<?php foreach ($friends as $friend) : ?>

        <?php echo $friend['UserTo']['firstname']; ?>

    <?php endforeach; ?>

しかし、ファーストネームの部分が理解できません!そう...

ビューで $friend をデバッグすると、次のようになります。

array(
    'Friend' => array(
        'id' => '1',
        'user_from' => '6',
        'user_to' => '8',
        'created' => '0000-00-00 00:00:00',
        'status' => '1'
    ),
    'UserFrom' => array(
        'password' => '*****',
        'id' => '6',
        'username' => 'driz',
        'email' => 'cameron@driz.co.uk',
        'status' => '1',
        'code' => '6d446abefc2f1214e561da6f93470621',
        'lastlogin' => '2012-04-23 15:22:04',
        'created' => '0000-00-00 00:00:00'
    ),
    'UserTo' => array(
        'password' => '*****',
        'id' => '8',
        'username' => 'testperson',
        'email' => 'test@testperson.com',
        'status' => '1',
        'code' => '7a794859b3a16dfc005dd7f80b9ac030',
        'lastlogin' => '2012-03-18 09:28:24',
        'created' => '0000-00-00 00:00:00'
    )
)

したがって、それは明らかにリンクされたユーザーの問題であり、プロファイルも含める必要があります...しかし、UserToとUserFrom内にcontainを配置すると、それらが関連付けられていないというエラーがスローされるため、どうすればよいですか...

4

1 に答える 1

0
class User extends AppModel {
    public $name = 'User';

    public $hasOne = 'Profile';
    public $belongsTo = array(
      'Friend'=>array(
        'foreignKey' => 'user_to'
      )
    );
}

class Profile extends AppModel {
    public $name = 'Profile';
    public $belongsTo = 'User';
}

class Friend extends AppModel {
    public $name = 'Friend';
    public $hasOne = 'User';
}

次の方法でユーザーの友達を取得できるようになりました。

$this->Friend->find("all", array(
  'conditions'=>array(
    'Friend.user_from'=>$user_id,
  )
  'contain'=>array(
    'User'=>array(
      'contain'=>'Profile'
    )
  )
));
于 2012-04-26T20:54:59.647 に答える