Путаница с сущностью CakePHP 3

Вот проблема, с которой я сталкиваюсь все время с тех пор, как начал изучать CakePHP 3.

Какова эта концепция сущности, пример из реального мира очень поможет.

public function add()
{
            // why do we have to create new entity / what is the role of entity here. 
    $comment = $this->Comments->newEntity();

    if ($this->request->is('post','put')) {

                    // why do we have to use this line after posting / what is the role of this line. 

        $comment = $this->Comments->patchEntity($comment,$this->request->data);

        if ($this->Comments->save($comment)) {
            $this->Flash->success('comment submitted successfully.');
        } else {
            $this->Flash->error('Sorry, comment could not be updated.');
        }
    }

    return $this->redirect($this->referer());
}

person justrohu    schedule 19.02.2015    source источник
comment
api.cakephp.org/3.0/class-Cake.ORM. Table.html#_patchEntity см. здесь   -  person ankitr    schedule 19.02.2015


Ответы (3)


Позвольте мне открыть для вас книгу:

В то время как табличные объекты представляют и предоставляют доступ к набору объектов, сущности представляют отдельные строки или объекты домена в вашем приложении. Сущности содержат постоянные свойства и методы для управления содержащимися в них данными и доступа к ним.

-

почему мы должны создавать новую сущность / какова роль сущности здесь.

Почти все, если не все, в Cake3 работает с сущностями, что такое сущности, описано выше. Вам нужно создать новый объект, чтобы FormHelper мог работать с ним, AFAIR он все еще может работать с массивом, если он настроен для этого, но объект должен использоваться.

Сущности существуют для того, чтобы абстрагироваться от данных. Некоторые люди думают, что сущности представляют собой строку БД, но это неправильно. Как говорится в книге, они могут быть строкой, но не обязаны представлять строку, потому что ORM 3.0 может работать и с другими ресурсами. Теоретически у вас может быть источник данных CSV, который возвращает объект в каждой строке.

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

почему мы должны использовать эту строку после публикации / какова роль этой строки.

Данные сообщения объединяются с ранее созданным объектом, вот и все. Используйте API, если у вас есть такие основные вопросы. См. запись API для patchEntity().

person floriank    schedule 19.02.2015
comment
хотя я согласен с вашим ответом, может быть, лучше не говорить, что это неправильно, поскольку, как вы сами говорите, это может быть правильно. Для программистов, пришедших из RDB, сказать, что это может быть правильно, может быть лучшим способом помочь им. - person khany; 28.12.2015

Проще говоря, Entity — это набор из одной записи таблицы и их реляционной таблицы, с которой вы можете выполнять операции, не касаясь базы данных, и инкапсулировать свойства сущности (поля таблицы) по своему усмотрению.

Преимущества сущности.

  • Изменение наборов результатов вне базы данных (для форматирования или иным образом)
  • Необходимость представлять как таблицу, так и строку в одном классе.
  • Проверка данных была гребаным кошмаром.
  • Несогласованный API с точки зрения как того, как мы обрабатывали вещи внутри, так и того, что (и как) мы возвращали.
  • Другие случайные вещи, как вы хотите.

  • Вы можете изменять наборы результатов во время выполнения. Просто добавьте метод к своей сущности, чтобы возвращать результаты так, как вы хотите. Это также означает, что вы можете использовать композицию для управления сущностями (черты yaya).

  • Валидация красивая. Мы можем проверить данные до того, как они попадут в объект, а затем проверить состояние объекта на отдельном шаге.
  • Разработчикам легче понять, с чем они имеют дело. У вас либо есть объект, либо массив объектов. Объект может быть связан с данными, которые могут также включать в себя другие объекты, но вам больше не нужно гадать, каким будет ключ массива и не будет ли он вложенным.
  • Мы можем перебирать интерфейс для таблиц и сущностей отдельно. Мы не могли легко изменить внутренности старого класса Model из-за последствий для обоих, тогда как теперь мы можем (теоретически) изменить одно, не возясь с другим.
  • Это выглядит красивее просто.
person Haresh Vidja    schedule 18.07.2016

Попробуй это:

if ($this->request->is('post','put')) {
 $data = $this->request->getData();
 $comment = $this->Comments->newEntity();
 $comment = $this->Comments->patchEntity($comment, $data);
 $status = $this->Comments->save($comment);
   if ($status) {
     $this->Flash->success('comment submitted successfully.');
   } else {
     $this->Flash->error('Sorry, comment could not be updated.');
   }
}

вернуть $this->redirect($this->referer());

}

Мой совет: никогда не используйте Post и Put в одной и той же функции. Просто для хорошей практики. Put отлично работает, когда вы делаете обновление, используя идентификатор как параметр.

person Bruny    schedule 06.09.2019