Выпечка контроллера с Cakephp 3.2 с использованием SQLite3 вызывает ошибку в методах add() и edit(), почему код генерируется некорректно?

86
11

Ошибка заключается в том, что при создании кода контроллера переменная для связанной модели остается пустой и имя модели остается пустым. Ошибка возникает при создании контроллеров для всех моих таблиц, но вот полный пример одного из них. Я реплицировал проблему на новую установку cakephp 3.2.

Вот две строки неправильного кода, сгенерированные, я включил полную информацию ниже:

$ = $this->Customers->->find('list', ['limit' => 200]);
$this->set(compact('customer', ''));

Моя конфигурация базы данных в config/app.php:

'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Sqlite',
'persistent' => false,
'host' => 'localhost',
//'port' => 'non_standard_port_number',
'username' => null,
'password' => null,
'database' => 'tgr.db',
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
'url' => env('DATABASE_URL', null),
]

Код, созданный для метода add(), который содержит неправильно созданный код.

public function add(){
$customer = $this->Customers->newEntity();
if ($this->request->is('post')) {
$customer = $this->Customers->patchEntity($customer, $this->request->data);
if ($this->Customers->save($customer)) {
$this->Flash->success(__('The customer has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The customer could not be saved. Please, try again.'));
}
}
$ = $this->Customers->->find('list', ['limit' => 200]);
$this->set(compact('customer', ''));
$this->set('_serialize', ['customer']);
}

Моя база данных хранится в корне приложения, и приложение находит ее и правильно соединяется с тем, что я могу сказать. Схема базы данных:

-- Text encoding used: UTF-8
--
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;

-- Table: customers
CREATE TABLE customers (_id INTEGER PRIMARY KEY,district_key INTEGER NOT NULL, name TEXT UNIQUE NOT NULL, short_name TEXT UNIQUE NOT NULL, job_count INTEGER, report_count INTEGER, FOREIGN KEY (district_key) REFERENCES districts (_id) );

COMMIT TRANSACTION;
PRAGMA foreign_keys = on;

спросил(а) 2016-04-20T19:35:00+03:00 4 года, 10 месяцев назад
1
Решение
74

Я нашел ответ. Колонки идентификатора моей базы данных были _id (из столбца id по умолчанию для android), и пекарня cakephp преследовала это, чтобы быть связанной моделью с пустым именем, понимающим, что она принимает все, что приходит до _id, и создает для нее модель. Я обновил все мои таблицы базы данных, чтобы отразить это, и он работает правильно.

ответил(а) 2016-04-20T19:54:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема