Я использую CakePHP 3.
У меня есть таблица счетов. Каждая учетная запись принадлежит стране. Таблица стран интернационализирована с использованием функции Translate Behavior, поэтому в ней могут храниться названия стран для каждого языка.
class CountriesTable extends Table
{
public function initialize(array $config)
{
$this->table('countries');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Translate', ['fields' => ['name']]);
}
Обратите внимание, что поле «name» интернационализировано с помощью поведения Translate, поэтому его нет в таблице стран.
Затем в AccountsController я хочу получить список стран, использующих активный язык:
....
$countries = $this->Accounts->Countries->find('list', ['limit' => 200]);
.....
Проблема в том, что он не получает переводы из таблицы i18n, как ожидалось. Я уже закодировал действия по обслуживанию для таблицы интернационализированных стран, и все работает нормально, но этот простой find('list')
не работает.
Еще одна деталь: в журналах Mysql я вижу, что он запустил этот запрос. Обратите внимание, что в таблице стран есть только два поля: id и code, но displayField - это name.
SELECT Countries.id AS `Countries__id`, Countries.code AS `Countries__code` FROM countries Countries LIMIT 200
кстати, становится действительно сложно переключиться с 2.x на 3.x.
debug($this->Accounts->Countries)
- это объект CountryTable? Обычная причина того, что код в классах модели не имеет никакого эффекта - они вообще не загружаются (я имею в видуthe countries table has only two fields: id and code, but the displayField is name
и не совпадающий sql) - person AD7six   schedule 06.08.2015$this->Accounts->Countries
он возвращаетCake\ORM\Association\BelongsTo
. После выполнения кода переменная$countries
имеет типCake\ORM\Query
. В любом случае, как его нельзя загрузить, если он хорошо связан в AccountsTable с$this->belongsTo('Countries', [ 'foreignKey' => 'country_id', 'joinType' => 'INNER' ]);
- person pperejon   schedule 06.08.2015