arrilot / bitrix-models

MIT License
121 stars 37 forks source link

Одновременное использование моделей Элемента и Секции #7

Closed vkryukov76 closed 7 years ago

vkryukov76 commented 7 years ago

Случайно обнаружил такой баг:

Если в коде используются модели Элемента и Секции, то в свойство модели bxObject записывается класс первой вызванной модели.

Добавил дополнительную проверку в код

if (static::$bxObject && (get_class(static::$bxObject) == static::$objectClass) ) {
    return static::$bxObject;
}

https://github.com/arrilot/bitrix-models/blob/ad79f2ae069b538103cc6a1ecabfa775671a66a7/src/Models/BitrixModel.php#L361-L363

Но не уверен в правильности решения

arrilot commented 7 years ago

Привет, можешь показать пример твоего кода где проявляется ошибка?

vkryukov76 commented 7 years ago

Что-то вроде этого:


CModule::IncludeModule('iblock');

use Arrilot\BitrixModels\Models\SectionModel;
use Arrilot\BitrixModels\Models\ElementModel;

class SuperSection extends SectionModel
{
    /**
     * Corresponding iblock id.
     *
     * @return int
     */
    const IBLOCK_ID = 42;
}

class SuperElement extends ElementModel
{
    /**
     * Corresponding iblock id.
     *
     * @return int
     */
    const IBLOCK_ID = 42;
}

$elements =  SuperElement::query()->select('ID', 'NAME')->getList();
$sections =  SuperSection::query()->select('ID', 'NAME')->getList();

/*
$sections =  SuperSection::query()->select('ID', 'NAME')->getList();
$elements =  SuperElement::query()->select('ID', 'NAME')->getList();

*/

var_dump($elements->toArray());
var_dump($sections->toArray());
arrilot commented 7 years ago

Спасибо, поправлено в 0.5.1 Что-то многовато магии в пхпшных статических свойствах.