Я тестирую CakePHP 3.0-RC1 для возможного использования в новом проекте. После установки, настройки и создания двух (да, двух) таблиц базы данных я запустил «выпечку всех» для обеих таблиц.
После работы с ложными ссылками внешнего ключа в модели (внешний ключ, определенный как первичный ключ, ссылающийся на себя? Да ладно, Бейкеры!) Я сталкиваюсь с этой ошибкой:
Ошибка: Метод Cake\ORM\Query::__toString() не должен вызывать исключение Файл /srv/www/htdocs/wmcb/cake/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php Строка: 193
Не мой код. ;)
Определение оскорбительной таблицы:
-- -----------------------------------------------------
-- Table `ISOCountryCodes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `iso_country_codes` (
`iso_country_code_id` VARCHAR(4) CHARACTER SET utf8 NOT NULL ,
`iso_country_name` VARCHAR(64) CHARACTER SET utf8 NOT NULL ,
`iso_country_name_french` VARCHAR(64) CHARACTER SET utf8 NOT NULL ,
PRIMARY KEY (`iso_country_code_id`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8
COMMENT = 'Look-up table of ISO 3166-1 Country Names and Codes'
;
Метод индекса IsoCountryCodesController, сгенерированный выпечкой:
/**
* Index method
*
* @return void
*/
public function index()
{
$this->paginate = [
'contain' => ['IsoCountryCodes']
];
$this->set('isoCountryCodes', $this->paginate($this->IsoCountryCodes));
$this->set('_serialize', ['isoCountryCodes']);
}
И метод инициализации из IsoCountryCodesTable.php:
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('iso_country_codes');
$this->displayField('iso_country_code_id');
$this->primaryKey('iso_country_code_id');
// $this->belongsTo('IsoCountryCodes', ['foreignKey' => iso_country_code_id']);
}
с закомментированным рефлексивным внешним ключом.
Это поведение справедливо для обеих таблиц.
CakePHP 2.5 корректно работает с теми же определениями таблиц базы данных.
set()
с_serialize
, но я использую недавний снимок разработчика, возможно, вам тоже стоит попробовать. - person ndm   schedule 22.01.2015