CakePHP - установить значения полей по умолчанию в модели - PullRequest
8 голосов
/ 01 декабря 2011

Как установить значение по умолчанию для поля в модели?

РЕДАКТИРОВАТЬ:

Я пробовал метод с использованием _schema, как предлагается, но значение по умолчанию не используется.

public $_schema = array(
    'newsletter' => array(
        'default' => 1
    ),
);  

Ответы [ 5 ]

1 голос
/ 29 декабря 2016

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

public $items = array(
    'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 10, 'unsigned' => false, 'key' => 'primary'),
    'quantity' => array('type' => 'decimal', 'null' => false, 'default' => '1.00', 'length' => '12,2', 'unsigned' => false),
    //                                                        ^^^^^^^^^^^^^^^^^^^
    'indexes' => array(
        'PRIMARY' => array('column' => 'id', 'unique' => 1),
    ),
    'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_spanish_ci', 'engine' => 'InnoDB')
);

Это значение по умолчанию можно прочитать позднее в модели или контроллере, хотя свойство schema модели:

// Controller example
$itemSchema = $this->Item->schema();
$defaultQuantity = $itemSchema['quantity']['default'];
// ... or:
$quantityInfo = $this->Item->schema('quantity');
$defaultQuantity = $quantityInfo['default'];

В последних версиях PHP это может быть одна строка:

$defaultQuantity = $this->Item->schema('quantity')['default'];

Это работает в Cake / 2.5 с адаптером MySQL (без представления о других сценариях).

1 голос
/ 01 февраля 2015

Поскольку вышеупомянутые предложения не работают для меня, поэтому я нашел свои собственные.Ответ очень похож на написанное выше, но с одним небольшим исправлением.(работает с CakePHP 2.6.1)

Значение по умолчанию можно установить в контроллере в функции add (необходим запрос).

$this->request->data['Country']['hasFlag'] = 1; 

FullПример кода:

public function add() {
    if ($this->request->is('post')) {
        $this->Country->create();
        if ($this->Country->save($this->request->data)) {
            ...
        } else {
            ...
        }
    }
    $this->request->data['Country']['hasFlag'] = 1;  // default value passing to the view
}

Немного философии:
1) Зачем это нужно - Если в базе данных есть логический атрибут,Вновь созданный объект в Cakephp не учитывает значения по умолчанию из базы данных.И если мы оставим флажок снятым в форме Добавить нового объекта и отправим его в базу данных - это означает, что значение этого атрибута равно false (не значение не установлено )
2) Это идеальное место для установки значения по умолчанию? - Нет, это не идеальное место, так как вся информация об объекте и его данных должна быть в модели, но мне не удалось назначитьзначение по умолчанию в модели.Даже используя _schema переменную или создать функцию.

1 голос
/ 03 декабря 2011

Было бы лучше установить значение по умолчанию в базе данных?Я действительно не понимаю, почему вы хотели бы сделать это на стороне CakePHP ...

1 голос
/ 02 декабря 2011

вы всегда должны пытаться установить значения по умолчанию из контроллера: http://www.dereuromark.de/tag/default-values/

0 голосов
/ 29 марта 2014

базы данных становятся большими, поэтому вы не можете запомнить все те настройки по умолчанию, которые вы установили.Давайте сделаем это просто:

  1. Вы устанавливаете значения по умолчанию в контроллере (код легко читается, если значения по умолчанию для определенных действий устанавливаются в начале как свойства класса).

Например:

class UsersController extends AppController {
private $registerDefaults = array(
    'group_id' => '1'
);

public function register() {
    if ($this->request->is('post')) {
        /*
        * This is where you set default value
        * Here's what I do for default group that user should be assigned to
        */
        $this->request->data['User']['group_id'] = $this->registerDefaults['group_id'];

        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('You have been successfully registered.'));
            return $this->redirect(array('action' => 'index'));
        }
        $this->Session->setFlash(__('We're unable register this user.'));
    }
}
}

Вы не всегда можете запомнить значения по умолчанию, установленные в базе данных, если у вас около 60-80 таблиц со сложными отношениями.

AND

Мой совет: не устанавливайте значения по умолчанию, которые зависят от текущих настроек, будьте более гибкими: создайте таблицу конфигурации или установите значения по умолчанию в AppController, чтобы найти ее мгновенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...