cakephp: Используйте метод сохранения, я хочу обновить время изменения, когда данные не изменились - PullRequest
0 голосов
/ 15 ноября 2018

Пожалуйста, помогите мне решить эту проблему, большое спасибо.

часть 1: данные были изменены, я использую [$this->abcModel->save($abc);], изменен столбец abcTable's.===> все в порядке.

Часть 2: данные не изменились, я также хочу, чтобы abcTable's измененный столбец был изменен. Как это сделать?(если покажете мне пример, будет лучше понять.)

используя версию: cakephp 3.3

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Предположим, у вас есть форма со следующими полями.

Name: XYZ 
Number :077777777
**save** button.

Имеет действие редактирования / обновления формы

Случай 1: Пользователь вносит изменения и сохраняет форму. Случай 2: Пользователь не вносит никаких изменений и сохраняет форму.

В любом случае вам следует вызвать функцию редактирования (или обновления) вашего контроллера.Ваши поля ИМЯ И НОМЕР будут доступны в вашем контроллере и доступны через метод $ this-> request-> getData ().В идеале вам понадобятся два поля для отметок времени, как показано ниже: «CREATED_ON» и «UPDATED_ON»

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

<?php
namespace App\Model\Behavior;

use Cake\ORM\Behavior\TimestampBehavior;

/**
 * Modify built in CakePHP's Timestamp class's default config so no configuration is necessary for use in this project.
 */
final class CustomTimestampBehavior extends TimestampBehavior
{
    /**
     * Default config
     *
     * These are merged with user-provided config when the behavior is used.
     *
     * events - an event-name keyed array of which fields to update, and when, for a given event
     * possible values for when a field will be updated are "always", "new" or "existing", to set
     * the field value always, only when a new record or only when an existing record.
     *
     * refreshTimestamp - if true (the default) the timestamp used will be the current time when
     * the code is executed, to set to an explicit date time value - set refreshTimetamp to false
     * and call setTimestamp() on the behavior class before use.
     *
     * @var array
     */
    protected $_defaultConfig = [
        'implementedFinders' => [],
        'implementedMethods' => [
            'timestamp' => 'timestamp',
            'touch' => 'touch',
        ],
        'events' => [
            'Model.beforeSave' => [
                'CREATED_ON' => 'new',
                'UPDATED_ON' => 'existing',
            ]
        ],
        'refreshTimestamp' => true
    ];
}

и вызываете ее из таблицы модели.Примерно так:

   public function initialize(array $config)
    {
        parent::initialize($config);


        $this
            ->addBehavior('CustomTimestamp');

Таким образом, вам не нужно каждый раз вызывать $ this-> model-> touch ($ data) вручную.Поведение позаботится об этом всякий раз, когда оно создает или сохраняет.

Ссылка: https://api.cakephp.org/3.0/class-Cake.ORM.Behavior.TimestampBehavior.html

0 голосов
/ 16 ноября 2018

Cakephp версия: cakephp 3.3

$this->Model->touch($data);

[Rf.] https://book.cakephp.org/3.0/en/orm/behaviors/timestamp.html

...