首页 > 解决方案 > 在 vendor/cakephp/cakephp/src/ORM/Table.php 中调用成员函数 keys(),第 2625 行

问题描述

我创建了一个新控制器来保存我的网站的订阅计划。我正在尝试通过模型表创建新记录,但出现错误:Call to a member function keys() on nullvendor/cakephp/cakephp/src/ORM/Table.php, line 2625.

我要执行的代码是。

namespace SubscriptionPlans\Model\Table;


use App\Model\Table\AppTable;
use Cake\Chronos\Chronos;
use Cake\Datasource\ConnectionInterface;
use Cake\Datasource\ConnectionManager;
use Cake\Datasource\EntityInterface;
use SubscriptionPlans\Model\Entity\PartnerPlan;
use SubscriptionPlans\Model\Entity\PartnerPlanSubscription;
use SubscriptionPlans\Services\Period;

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选项,但我在文档中找不到任何关于此的内容。

标签: phpcakephpcakephp-3.7

解决方案


这是一个老问题,但这可能对其他人有帮助。

我在 PHP 8.0.13 和 XDebug 中遇到了同样的问题。这似乎与https://github.com/cakephp/chronos/issues/164__debugInfo()中提到的 XDebug 不兼容有关。我禁用了 XDebug 扩展,错误神奇地消失了。


推荐阅读