#php #cakephp #cakephp-3.7
#php #cakephp #cakephp-3.7
Вопрос:
Я создал новый контроллер для сохранения планов подписки для моего веб-сайта. Я пытаюсь создать новую запись через таблицу моделей, но получаю сообщение об ошибке: Call to a member function keys() on null
in vendor/cakephp/cakephp/src/ORM/Table.php, line 2625
.
Код, который я пытаюсь выполнить, является.
namespace SubscriptionPlansModelTable;
use AppModelTableAppTable;
use CakeChronosChronos;
use CakeDatasourceConnectionInterface;
use CakeDatasourceConnectionManager;
use CakeDatasourceEntityInterface;
use SubscriptionPlansModelEntityPartnerPlan;
use SubscriptionPlansModelEntityPartnerPlanSubscription;
use SubscriptionPlansServicesPeriod;
class PartnerPlanSubscriptionsTable extends AppTable
{
/** @var ConnectionInterface */
public $_connection;
public function __construct($arg)
{
parent::__construct($arg);
$this->_connection = ConnectionManager::get('default');
}
public function initialize(array $config)
{
parent::initialize($config);
$this->addBehavior('Timestamp', [
'events' => [
'Model.beforeSave' => [
'created_at' => 'new',
'updated_at' => 'always',
]
]
]);
}
public function create($partnerId, $subscriptionPlan, $interval = 'year', $intervalCount = 1, $startDate = null): EntityInterface
{
// If the $subscriptionPlan is a PartnerPlan entity, grab the id.
$planId = ($subscriptionPlan instanceof PartnerPlan) ? $subscriptionPlan->id : $subscriptionPlan;
// Create a new date period based on the provided create params
$period = new Period($interval, $intervalCount, $startDate);
/** @var PartnerPlanSubscription $subscription */
$subscription = $this->newEntity([
'partner_id' => $partnerId,
'partner_plan_id' => $planId,
'starts_at' => $period->getStartDate()->toDateTimeString(),
'ends_at' => $period->getEndDate()->toDateTimeString()
]);
return $this->save($subscription);
}
}
Я вижу vendor/cakephp/cakephp/src/ORM/Table.php:2625
, что ожидается какая-то associated
опция, но я ничего не могу найти в документации по этому поводу.
Комментарии:
1. Строка 2625 в таблице в основном
$options['associated'] = $this->_associations->keys();
? Если это так, то каким-то образом ваша таблица не была сконструирована должным образом, потому что именно тогда_associations
устанавливается значение. Посмотрите вверх по течению на AppTable, чтобы убедиться, что он вызывает конструктор Table. Или, может быть, что-то обычное очищает _associations до null после построения? Итог это не обычная проблема с библиотекой CakePHP, это что-то в вашем коде, что связано с обычными_associations
значениями, это всегда должно быть AssociationCollection2. Спасибо, я посмотрю 🙂 Работаю над новым командным проектом и не уверен, что именно я унаследовал. @ахоффнер
Ответ №1:
Это старый вопрос, но это может помочь другим.
Я столкнулся с такой же проблемой с PHP 8.0.13 и XDebug. Похоже, это связано с несовместимостью XDebug с __debugInfo()
упомянутым в https://github.com/cakephp/chronos/issues/164 . Я отключил расширение XDebug, и ошибка волшебным образом исчезла.