Модели CakePHP — почему это не для 1 элемента?

#php #cakephp

#php #cakephp

Вопрос:

Я просмотрел документацию по модели и не могу выяснить, как строить модели для 1 элемента …. например, я хочу, чтобы текущая модель пользователя имела addOpenId($openIdHash) , но как мне это сделать, не передавая идентификатор пользователя функции?

Я ищу что-то вроде…

 $user = $this->SobForm->get($userId);
$user->addOpenId($openIdHash);
  

Я говорю, похоже, что CakePHP построен вокруг моделей, которые не управляют ни одним элементом, поэтому контроллер мог бы иметь функцию «$ user-> getAllUsers()», тогда как для меня это не модель, это менеджер или помощник. Как я могу использовать модель в CakePHP, где она является единственной, поэтому она воздействует только на 1 элемент или содержит только функции, связанные с одним элементом, вместо функций, которые воздействуют на все элементы.

Есть ли какая-либо поддержка для такого рода функциональности или я должен создавать все это с нуля?

Комментарии:

1. Не могли бы вы объяснить это лучше? У меня не было слишком много…

2. Не совсем. Простой ответ: создайте модель, которая влияет только на один элемент. Это вы создаете свои модели. Создавайте их так, как вам нужно.

3. Должен ли я все это создавать сам? Хранятся ли данные для отдельного элемента в модели в любой момент или мне нужно добавить поддержку для этого?

4. Вы должны создать модель, которая, обращаясь к базе данных, влияет только на один ее элемент. Я не думаю, что для этого есть готовые материалы.

Ответ №1:

SobForm кажется мне ужасно знакомым… Я думаю, что то, что вы пытаетесь сделать, это рассматривать переменную $ user как класс, а это не так. Модель является классом, как и контроллер, но отдельная переменная, являющаяся результатом запроса к базе данных, не может быть классом. Что вы могли бы сделать, это что-то вроде $user = $this->OpenIdHelper->add($user,$openIdHash) и заставить его вернуть новый массив с добавленным OpenID, тогда, я полагаю, вы будете делать $this->SobForm->save($user) над ним? (P.S. вы работаете над проектом Summaries?) Вы также можете добавить свои собственные пользовательские функции для сохранения или обновления определенных данных в модели или вы можете сделать $this->SobForm->saveField('fieldname','data'); , чтобы просто сохранить одно поле данных вместо всего заново, если у вас сначала установлен идентификатор.