Code Monkey home page Code Monkey logo

bitrix-models's People

Contributors

arrilot avatar maltf0 avatar msnatali avatar sanchesfree avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bitrix-models's Issues

Использование пакета в рамках laravel 5.4

Было бы удобно использовать этот пакет для самого laravel 5.4, при использовании laravel в качестве фронта.

В данный момент выбрасывает ошибку:

FatalThrowableError in ProviderRepository.php line 149:
Call to undefined method Arrilot\BitrixModels\ServiceProvider::isDeferred()

Детальная настройка подключения к БД

Здравствуйте!

Можно-ли, не модифицируя bitrix-models, организовать работу с несколькими БД?
Например, добавить внешнюю БД postgree.

Стандартно в Битриксе это решается добавлением подключения в файле /bitrix/.settings.php

Второй вопрос: можно-ли в bitrix-models добавлять options для подключения?
Пример из Laravel:
app/config/database.php

return array(
    'connections' => array(
        'mysql' => array(
            'options'   => array(
                PDO::ATTR_CASE => PDO::CASE_UPPER,
            ),
        ),
     )
)

Это позволит объявлять в моделях названия колонок таблиц в lower_case.

Проблемы с limit()

Если применить limit () к инфоблоку "некаталожного" типа (например, новостям), то он работает криво. Чтобы выбрать 16 записей надо задать 95.

$this->interior = \interior::query()->select('ID')
->filter([

	                   ])
	                   ->sort(['SHOW_COUNTER' =>'DESC'])
	                   ->select ('NAME', 'FIELDS', 'SHOW_COUNTER', 'PROPERTY_PHOTO')
	                   ->limit(16)
	                   ->getList()
	                   ->toArray()
	;

Вытаскиевает только три элемента. Ставишь 95 - вытягивает сколько нужно.

interior:

class interior extends ElementModel
{

const IBLOCK_ID = \iblocksID::INTERIOR;

}

Обновление элемента с неполным набором свойств

При вызове метода Save() на элементе с неполным набором свойств, они пропускаются через setPropertyValues, соответственно затираются все остальные свойства. Это ожидаемое поведение или нет?

Вот, еще похоже что при вызове Save() на элементе с множественным свойством файл - дублируется PROPERTY_VALUE_ID , точнее, они не дублируются, а создаются новые в количестве равном текущему размеру массива PROPERTY_VALUE

P.S. Огромное спасибо за проделанную работу!

Object initialization failed

Иногда на разных машинах получение элементов из БД падает с ошибкой:

[LogicException]
Object initialization failed (0)
/var/www/artem/data/www/mysite.ru/local/vendor/arrilot/bitrix-models/src/Models/BitrixModel.php:218
#0: Arrilot\BitrixModels\Models\BitrixModel::instantiateObject()
/var/www/artem/data/www/mysite.ru/local/vendor/arrilot/bitrix-models/src/Models/ElementModel.php:136
#1: Arrilot\BitrixModels\Models\ElementModel::query()
/var/www/artem/data/www/mysite.ru/local/vendor/arrilot/bitrix-models/src/Models/BaseBitrixModel.php:274
#2: Arrilot\BitrixModels\Models\BaseBitrixModel::__callStatic(string, array)
/var/www/artem/data/www/mysite.ru/local/classes/Myhelp.php:54
#3: Artem\Myhelp->isPromotion(string)
/var/www/artem/data/www/mysite.ru/local/templates/vabank_map/components/bitrix/news.detail/guides/component_epilog.php:85
#4: include(string)
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/classes/general/component.php:1398
#5: CBitrixComponent->includeComponentEpilog(array)
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/classes/general/component.php:965
#6: CBitrixComponent->startResultCache(integer, array)
/var/www/artem/data/www/mysite.ru/bitrix/components/bitrix/news.detail/component.php:137
#7: include(string)
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/classes/general/component.php:551
#8: CBitrixComponent->__includeComponent()
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/classes/general/component.php:603
#9: CBitrixComponent->includeComponent(string, array, NULL)
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/classes/general/main.php:1041
#10: CAllMain->IncludeComponent(string, string, array)
/var/www/artem/data/www/mysite.ru/guides/index.php:55
#11: include_once(string)
/var/www/artem/data/www/mysite.ru/bitrix/modules/main/include/urlrewrite.php:159
#12: include_once(string)
/var/www/artem/data/www/mysite.ru/bitrix/urlrewrite.php:2

Функция в которой происходит вызов:

    public function isPromotion($qid)
    {
        $res = \Questions::select('PROPERTY_PROMODATE')->getById($qid);
        return $res['PROPERTY_PROMODATE_VALUE'];
     }

Связанные данные тип справочник и Eloquent

При использовании связанных данных для свойства типа справочник, даёт ошибку Getting unknown property

$this->$getter() в методе __get класса BaseBitrixModel для такого свойства возвращает объект Illuminate\Database\Eloquent\Builder

В Accessors не удалось поместить массив

Subj. Со строками и числами проблем нет, но с массивом обломался. Пример:

class protectedProject extends ElementModel {

const IBLOCK_ID = 110;
const IBLOCK_VERSION = 1;

protected $appends = ['NORMALIZE_ORDER'];

public function getNormalizeOrderAttribute()
    {

// $this['PROPERTY_SOSTAVZAKAZ_VALUE & $this['PROPERTY_QTYZAKAZ_VALUE'] - массивы гарантированно.

	$ewa = array_combine ( $this['PROPERTY_SOSTAVZAKAZ_VALUE'] , $this['PROPERTY_QTYZAKAZ_VALUE'] );

	return $ewa;

    }

}

В 'NORMALIZE_ORDER' пустота.

Так и задумано?

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

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

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

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

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

if (static::$bxObject) {
return static::$bxObject;
}

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

0.5 Future changelog

BC:

  1. Удалена src/Collection.php потому что конфликтовала с Illuminate\Support\Collection на php 5.6+
  2. Удалены заготовки для Relations. Пока что реализовываться не будут
  3. Удалены Model::getById, Model::getList, Model::first которые были deprecated
  4. Свойство ElementModel::$fetchUsing упразднено. Раньше был выбор между getNextElement (по умолчанию) и getNext. С этим много проблем с разными типами инфоблоков. Теперь всегда используется строго Fetch
  5. User::current() теперь сразу получает и поля юзера из БД (но только один раз)
  6. Формат аксессоров теперь 'get'.camel_case($field).'Attribute' вместо 'get'.camel_case($field).'Field' для консистентности с Eloquent

New:

  1. Id инфоблоков теперь можно указывать в константе IBLOCK_ID
  2. Добавлена интеграция с illuminate/database и Eloquent в том числе
  3. Минимальная версия php повышена до 5.6
  4. Добавлена поддержка illuminate/pagination
  5. Добавлен метод $model->load();
  6. Добавлен доступ к query() через __callStatic()

Illuminate 5.8

Попробовал использовать версию 5.8 - вроде все работает.
Не тестили работу с ней?

Когда много полей в базе свойств элемента инфоблока

Отличная штука, спасибо. Пара моментов:

Когда много полей в базе свойств элемента инфоблока и ставишь опцию PROPS ожидаемо вываливается с ошибкой Too many tables; MySQL can only use 61 tables in a join. Причем, количество property не впечатляющее - штук 20 или 30 на элемент.

Хорошо бы сделать по аналогии с activate/deactivate функцию установки цен.

In development?

Использовал модуль на небольшом проекте. Показалось что он довольно стабильный, но напрягает надпись "В разработке".

Вижу что уже год не было по нему обновлений. Хотелось бы узнать что осталось нереализованным, какие могут быть подводные камни при использовании?

SECTION_PAGE_URL в выборке SectionModel

Выдает шаблон ссылок, а не уже сгенерированные ссылки (как понимаю из-за применения fetch вместо GetNext)

$sectionsListForSmallMenu = oboiCollection::query()->select('ID')
->sort(["SORT" => "ASC", "NAME" => "ASC"])
->filter(["IBLOCK_ID" => $arParams['IBLOCK_ID'], "ACTIVE" => "Y", "SECTION_ID" => false])
->limit(10)
->select("ID", "CODE", "NAME", "SECTION_PAGE_URL")
->getList()
->toArray()
;

printr ($sectionsListForSmallMenu);

Результат:

[4550] => Array
(

        [SECTION_PAGE_URL] => #SITE_DIR#wallcoverings/#SECTION_CODE_PATH#/
   )     

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.