在执行$ this-> Event-> find()后,我得到以下结果:
array(
'Event' => array(
'event_id' => '72',
'user_id' => '54c7e9f9-2520-48ca-ab70-1dfccf31a6d6',
'title' => 'dfg',
'start' => '2015-02-11 20:28:00',
'public' => '0'
),
'User' => array(
'password' => '*****',
'id' => '54c7e9f9-2520-48ca-ab70-1dfccf31a6d6',
'username' => '*',
'slug' => '',
'password_token' => null,
'email' => '*',
'email_verified' => true,
'email_token' => '*',
'email_token_expires' => '2015-01-28 20:41:45',
'tos' => true,
'active' => true,
'last_login' => '2015-02-11 23:17:48',
'last_action' => null,
'is_admin' => true,
'role' => 'registered',
'created' => '2015-01-27 20:41:45',
'modified' => '2015-02-11 23:17:48'
),
'EventGuest' => array(
(int) 0 => array(
'id' => '84',
'event_id' => '72',
'guest_id' => '54db93be-0ef8-47d2-9bdb-118ccf31a6d6',
'accepted' => '1'
),
(int) 1 => array(
'id' => '85',
'event_id' => '72',
'guest_id' => '54d1185f-8968-485e-b88f-1dd8cf31a6d6',
'accepted' => '0'
)
)
)
如何将guest_id解析为位于用户表中的用户名?
基本上我想要以下输出: ...
'EventGuest' => array(
(int) 0 => array(
'id' => '84',
'event_id' => '72',
'guest_id' => '54db93be-0ef8-47d2-9bdb-118ccf31a6d6',
'username' => 'Test',
'accepted' => '1'
),
(int) 1 => array(
'id' => '85',
'event' => '72',
'guest_id' => '54d1185f-8968-485e-b88f-1dd8cf31a6d6',
'username' => 'Test2',
'accepted' => '0'
)
)
)
(请注意字段用户名)
如何在不逐一查找每个用户名的情况下实现这一目标,还是包含一个漂亮的CakePHP功能?
关系:
事件:
属于关联:
的hasMany:
EventGuest:
属于关联:
用户
的hasMany:
请您解释一下,我如何有效地解决这个问题?
亲切的问候,
Battlestr1k3
答案 0 :(得分:0)
您不会将名称输入用户名字段,而不是Cake如何格式化结果。你可以这样做:
假设您正在使用可包含的行为,请尝试以下方法:
'contain' => [
'User',
'EventGuest' => [
'User' => [
'fields' => [
'User.username'
]
]
]
]
它应该给你这样的东西:
'EventGuest' => array(
(int) 0 => array(
'id' => '84',
'event_id' => '72',
'guest_id' => '54db93be-0ef8-47d2-9bdb-118ccf31a6d6',
'accepted' => '1',
'User' => array(
'username' => 'Test'
)
),
)
如果您迫切依赖于在数组中使用“username”键,则在Model :: afterFind()回调中运行该数组,并设置该键并从User数组中复制该名称。但我不会这样做,浪费处理时间。
答案 1 :(得分:0)
在Cakephp conventions之后,EventGuest表必须被称为EventUser。 那么,从用户到事件的关系是什么?我们只知道从事件到用户的关系.. 然后,如果我正确理解您的模型,您可以使用以下命令查找指定用户ID的事件:
$this->User->find('all',array('conditions'=>array('User.username'=>$id)));
其中$ id是您需要查找的用户名的ID。
答案 2 :(得分:0)
我通过设置让它工作 $ this-> Event-> recursive = 3; 但我认为我可以更有效地做到这一点,因为它甚至可以显示客人友谊中的数据。
编辑:使用以下行,输出看起来很好: $这 - > Gamesession->包含(阵列( 'GamesessionGuest.User.username'));