Создайте пользовательский список полей ввода с полем отображения из связанной модели в cakephp 3
У меня три стола 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()
из 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....)
является user_key
от SocialAccounts
и значение сгенерированной опции будет id
из SocialAccounts
<option value="1<id from social_accounts>">Facebook(112233445566)</option>
<option value="2<id from social_accounts>">Youtube(2233112233)</option>
Возможно ли, если да, какой самый лучший и простой подход для этого.
Редактировать 2: Моя попытка
В действии контроллера
$socialAccounts = $this->CampaignSocialAccounts->SocialAccounts
->find('list', ['valueKey' => 'social_account_title'])
->contain(['SocialNetworks'])
->where(['user_id' => $this->Auth->user('id')]);
SocialAccount.php сущность
public function _getSocialAccountTitle()
{
if (isset($this->social_network)) {
return $this->social_network->title.' ('.$this->user_key.')';
}
return $this->id;
}
Все еще никакого эффекта
1 ответ
В вашем SocialAccounts
Сущность вы можете определить виртуальную собственность
public function _getFullName()
{
if(isset($this->social_network))
return $this->social_network->name.' ('.$this->user_key.')';
return $this->id;
}
тогда вы можете использовать ваше новое виртуальное свойство в вызове find()
в вашем контроллере
$socialAccounts = $this->CampaignSocialAccounts->SocialAccounts
->find('list', ['valueField' => 'full_name'])
->contain(['SocialNetworks'])
->where(['user_id' => $this->Auth->user('id')]);