Doctrine 尝试保存实体时出现分段错误

Doctrine 尝试保存实体时出现分段错误,doctrine,segmentation-fault,persist,connection-close,laminas-api-tools,Doctrine,Segmentation Fault,Persist,Connection Close,Laminas Api Tools,我正在使用Apigility创建一个API和ORM原则。以下代码在flush()时生成分段错误(我删除了一些验证): 只有在不使用$connection->close()时,我才会出现分段错误,所以我想这些连接可能会一直挂起,但我无法清楚地解释为什么会发生这种情况。您使用的是最新的学说版本吗?另外,请尝试升级您的PHP版本。是的,我使用的是最新的Doctrine版本(2.4.0)和PHP5.5.8。您解决过这个问题吗,我用PHP7解决了这个问题。但是当我只是偶尔运行clear()时。不,我无法修

我正在使用Apigility创建一个API和ORM原则。以下代码在flush()时生成分段错误(我删除了一些验证):


只有在不使用
$connection->close()时,我才会出现分段错误,所以我想这些连接可能会一直挂起,但我无法清楚地解释为什么会发生这种情况。

您使用的是最新的学说版本吗?另外,请尝试升级您的PHP版本。

是的,我使用的是最新的Doctrine版本(2.4.0)和PHP5.5.8。您解决过这个问题吗,我用PHP7解决了这个问题。但是当我只是偶尔运行clear()时。不,我无法修复这个问题。
class AdvertisersResource extends AbstractResourceListener 
{
    public function create($data)
    {
        $entityClass = $this->getEntityClass();
        $advertiserEntity = new $entityClass;
        $connection = $this->entityManager->getConnection();

        // rejecting if the posted data already contains an advertiser_id
        if (!empty($data->advertiser_id)) {
            return new ApiProblem(406, 'Advertiser ID cannot be provided at creation time.');
        }

        // generating the next advertiser_id
        $sql = "
        SELECT
            MAX(advertiser_id) + 1 as advertiser_id
        FROM
            advertisers
        ";
        $result = $connection->fetchAssoc($sql);
        if (empty($result)) {
            // error generating the new category_id
            return new ApiProblem(500, 'Database error.');
        }
        $advertiserEntity->setAdvertiserId((int)$result['advertiser_id']);

        // input data validation
        $advertisersRepository = $this->entityManager->getRepository('io\V1\Rest\Advertisers\AdvertisersEntity');

        // advertiser name uniqueness
        $result = $advertisersRepository->findBy(array('advertiserName' => $advertiserEntity->getAdvertiserName()));
        if (!empty($result)) {
            return new ApiProblem(406, 'There is already an advertiser with this name.');
        }

        // validate geo_id
        $sql = "
        SELECT
            countryCode
        FROM
            countries (NOLOCK)
        WHERE
            countryCode = '{$data->geo_id}'
        ";
        $result = $connection->fetchAssoc($sql);
        if (empty($result)) {
            return new ApiProblem(406, 'Invalid geo ID: ' . $data->geo_id . ".");
        }
        $advertiserEntity->setGeoId($data->geo_id);

        $advertiserEntity->setAdvertiserName($data->advertiser_name);

        // ?????????????????????????????????????????
        // ????????  WHY IS THIS NECESSARY  ????????
        // without it -> segmentation fault
        $connection->close();
        // ?????????????????????????????????????????

        $this->entityManager->persist($advertiserEntity);
        $this->entityManager->flush();

        $categories = $advertiserEntity->getCategories();
        $advertiserEntity->setCategories(Util::extractCollection($categories));

        return $advertiserEntity;
    }
}