我有三个表campaign_social_accounts
,social_accounts
和social_networks
SocialNetworks
包含用户可以通过
+-----+--------+
| id | title |
+-----+--------+
SocialAccounts
将所有帐户用户连接到列
+----+---------+-------------------+--------------+----------+
| id | user_id | social_network_id | access_token | user_key |
+----+---------+-------------------+--------------+----------+
CampaignSocialAccounts
已与Campaigns
关联,并为该广告系列添加了社交帐户
+-----+-------------+-------------------+
| id | campaign_id | social_account_id |
+-----+-------------+-------------------+
在add()
的{{1}}中我希望用户从CampaignSocialAccounts
中选择,这就是我在控制器中所做的事情
SocialAccounts
和$socialAccounts = $this->CampaignSocialAccounts->SocialAccounts->find('list', [
'conditions' => [
'user_id' => $this->Auth->user('id')
]
]);
add.ctp
问题
这会在列表中显示echo $this->Form->control('social_account_id', ['options' => $socialAccounts]);
,因为该字段中没有其他列可以设置为id
另外,我想显示类似
的列表displayField()
其中Facebook(112233445566)
Youtube(2233112233)
和Facebook
来自Youtube
表的标题,而SocialNetworks
来自(112233....)
的{{1}},并且生成的选项的值将为user_key
是SocialAccounts
id
SocialAccounts
是否有可能,如果是的话,最好和最简单的方法是什么。
编辑2:我的尝试
在控制器操作中
<option value="1<id from social_accounts>">Facebook(112233445566)</option>
<option value="2<id from social_accounts>">Youtube(2233112233)</option>
SocialAccount.php实体
$socialAccounts = $this->CampaignSocialAccounts->SocialAccounts
->find('list', ['valueKey' => 'social_account_title'])
->contain(['SocialNetworks'])
->where(['user_id' => $this->Auth->user('id')]);
仍然没效果
答案 0 :(得分:1)
SocialAccounts
实体中定义虚拟财产
public function _getFullName()
{
if(isset($this->social_network))
return $this->social_network->name.' ('.$this->user_key.')';
return $this->id;
}
然后tu可以在find()调用中使用您的新虚拟属性
控制器中的
$socialAccounts = $this->CampaignSocialAccounts->SocialAccounts
->find('list', ['valueField' => 'full_name'])
->contain(['SocialNetworks'])
->where(['user_id' => $this->Auth->user('id')]);