onPHP / onphp-framework

onPHP is the mature GPL'ed multi-purpose object-oriented PHP framework.
85 stars 52 forks source link

Ошибка при сохранение через DAO #228

Open dewid1985 opened 9 years ago

dewid1985 commented 9 years ago

Тут такое дело. конфиг соеденинения 'connector' => 'PgSQL', 'host' => '192.168.5.58', 'bases' => 'test', 'user' => 'test', 'pass' => ''

устанавливаю параметры через setDefault()

это SQL CREATE SCHEMA logs;

-- object: logs.admin_auth_logs | type: TABLE -- -- DROP TABLE logs.admin_auth_logs; CREATE TABLE logs.admin_auth_logs( id serial, system_user boolean, admin_id integer, entry_at timestamptz, login varchar(64), password varchar(256), ip varchar(15), captcha varchar(16), blocked_ip boolean, date_blocking_ip timestamptz, black_ip_list_id integer, CONSTRAINT pk__admin_auth_logs PRIMARY KEY (id)

); -- ddl-end -- -- NOTE: below all the code for some key referrer objects are attached -- as a convinience in order to permit you to test the whole object's -- SQL definition at once. When exporting or generating the SQL for -- the whole database model all objects will be placed at their -- original positions.

-- object: fkadmin_id | type: CONSTRAINT -- -- ALTER TABLE logs.admin_auth_logs DROP CONSTRAINT fk__admin_id; ALTER TABLE logs.admin_auth_logs ADD CONSTRAINT fkadmin_id FOREIGN KEY (admin_id) REFERENCES users.admin (id) MATCH FULL ON DELETE NO ACTION ON UPDATE NO ACTION; -- ddl-end --

-- object: fkblack_ip_list_id | type: CONSTRAINT -- -- ALTER TABLE logs.admin_auth_logs DROP CONSTRAINT fk__black_ip_list_id; ALTER TABLE logs.admin_auth_logs ADD CONSTRAINT fkblack_ip_list_id FOREIGN KEY (black_ip_list_id) REFERENCES users.black_ip_list (id) MATCH FULL ON DELETE NO ACTION ON UPDATE NO ACTION; -- ddl-end --

ЭТО МЕТА

<?xml version="1.0"?>
<!DOCTYPE metaconfiguration SYSTEM "meta.dtd">
<metaconfiguration>
    <classes>
        <class name="PlatformLogsAdminAuthLogs" table="logs.admin_auth_logs" >
            <properties>
                <identifier name="id"/>
                <property name="systemUser" type="Boolean" default="false" required="false"/>
                <property name="admin" column="admin_id" type="PlatformUsersAdmin" relation="OneToOne" fetch="lazy"
                          required="false"/>
                <property name="entryAt" type="TimestampTZ" required="false"/>
                <property name="login" type="String" size="64" required="false"/>
                <property name="password" type="String" size="256" required="false"/>
                <property name="ip" type="String" size="15" required="false"/>
                <property name="captcha" type="String" size="16" required="false"/>
                <property name="blockedIp" type="Boolean" default="false" required="false"/>
                <property name="dateBlockingIp" type="TimestampTZ" required="false"/>
                <property name="blackList" column="black_ip_list_id" type="PlatformUsersBlackIpList" relation="OneToOne"
                          fetch="lazy" required="false"/>
            </properties>
            <pattern name="StraightMapping"/>
        </class>
    </classes>
</metaconfiguration>

После генерации делаю что то подобное

PlatformLogsAdminAuthLogs::dao()->add(
                PlatformLogsAdminAuthLogs::create()
                    ->setSystemUser($request->getSystemUser())
                    ->setAdminId($request->getAdminId())
                    ->setEntryAt($request->getEntryAt())
                    ->setLogin($request->getLogin())
                    ->setPassword($request->getPassword())
                    ->setIp($request->getIp())
                    ->setCaptcha($request->getCaptcha())
                    ->setBlockedIp($request->getDateBlockingIp())
                    ->setBlackListId($request->getBlackListId())
            );

Получаю следующие.

PostgresDatabaseException Object
(
    [message:protected] => ОШИБКА:  42P01: отношение "logs.admin_auth_logs" не существует - INSERT INTO "logs.admin_auth_logs" ("id", "system_user", "admin_id", "entry_at", "login", "password", "ip", "captcha", "blocked_ip", "date_blocking_ip", "black_ip_list_id") VALUES ('22', FALSE, NULL, '2014-12-15 04:16:29-0800', '123', '123', '192.168.0.102', NULL, NULL, NULL, NULL)
    [string:Exception:private] => 
    [code:protected] => КА:
    [file:protected] => /home/shein/onPHP/onphp/core/DB/PgSQL.class.php
    [line:protected] => 111
    [trace:Exception:private] => Array

преобразования 'logs.admin_auth_logs' -> "logs"."admin_auth_logs" не делает, делает я как понимаю PostgresDialect он у меня работает либо не правильно либо я сам что то не так делаю. Подскажите плиз.

crazedr0m commented 9 years ago

Мета странная. А чего там в AutoPlatformLogsAdminAuthLogs ?

AlexeyDsov commented 9 years ago

вот такое не проходит:

<class name="LogsAdminAuthLogs" table="logs.admin_auth_logs" >
dewid1985 commented 9 years ago

Алексей тогда как быть если всегда проходило а сейчас не проходит

dewid1985 commented 9 years ago

До этого на пред идущей работе все прекрасно работало жалоб не было )))

crazedr0m commented 9 years ago

@dewid1985 я так понимаю logs - это другая база?

dewid1985 commented 9 years ago

нет это одна база но другая схема

dewid1985 commented 9 years ago

SQL высше

dewid1985 commented 9 years ago

PlatformLogsAdminAuthLogs::dao()->getById(4); работает без нареканий

AlexeyDsov commented 9 years ago

фреймворк с разными схемами работать не обучен

crazedr0m commented 9 years ago

@dewid1985 не очень давно кто-то квотинг чинил, надо посмотреть вливали или нет, если вливали, то попробовать откатиться

dewid1985 commented 9 years ago

Ребята все работало на ура, поверте мне на пред идущей работе все работает.

DeryabinSergey commented 9 years ago

Это чинили на MyDialect по моей просьбе.

понедельник, 15 декабря 2014 г. пользователь Igor V. Gulyaev написал:

@dewid1985 https://github.com/dewid1985 не очень давно кто-то квотинг чинил, надо посмотреть вливали или нет, если вливали, то попробовать откатиться

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/issues/228#issuecomment-66988108 .

crazedr0m commented 9 years ago

@dewid1985 ну и @AlexeyDsov говорит правду да, не понятно как оно раньше работало.

AlexeyDsov commented 9 years ago

На прошлой работе использовали этот репозиторий или был свой форк?

dovg commented 9 years ago

@dewid1985 ради заботы о будущих поколениях избегай жаргона типа "скульчик" и переименуй пожалуйста заголовок этого ишью. Думай о тех, кто это будет гуглить.

DeryabinSergey commented 9 years ago

Прогона тесты значит для начала целиком. От версии пыха может зависеть

понедельник, 15 декабря 2014 г. пользователь Dewid написал:

Ребята все работало на ура, поверте мне на пред идущей работе все работает.

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/issues/228#issuecomment-66988238 .

dewid1985 commented 9 years ago

Нет использовали этот репозиторий.

dewid1985 commented 9 years ago

версия 5.6

DeryabinSergey commented 9 years ago

Тесты дефолтные отрабатывают все без ошибок?

понедельник, 15 декабря 2014 г. пользователь Dewid написал:

версия 5.6

— Reply to this email directly or view it on GitHub https://github.com/onPHP/onphp-framework/issues/228#issuecomment-66988648 .

AlexeyDsov commented 9 years ago

в дефолтных тестах нет использования другой схемы.

ради интереса в мете замените строчку

<class name="LogsAdminAuthLogs" table="logs.admin_auth_logs" >

на

<class name="LogsAdminAuthLogs" table="logs&quot;.&quot;admin_auth_logs" >
dewid1985 commented 9 years ago

в данном случае ругается на sequence
public function getTable() { return 'logs"."admin_auth_logs'; } я уже переопределял ручками тогда перестовал работать getById()

dewid1985 commented 9 years ago
<metaconfiguration><classes><class name="CRMLocationsLocationClassifierStrata" table="locations.location_classifier_strata"><properties><identifier name="id"/><property name="country" column="country_id" type="CRMLocationsLocationClassifierCountry" relation="OneToOne" fetch="lazy" required="true"/><property name="name" type="String" required="true"/></properties><pattern name="StraightMapping"/></class></classes></metaconfiguration> 
dewid1985 commented 9 years ago

это мета с пред идущей работы

dewid1985 commented 9 years ago

все работает без проблем

AlexeyDsov commented 9 years ago

Это было лишь предположение - как можно попробовать обмануть эскейпинг таблицы. Ни один из диалектов не умеет в мастере эскейпить имена со схемами. См. метод Dialect::quoteTable - просто обрамление в соотвествующие кавычки всего названия.

dovg commented 9 years ago

@dewid1985 от нас-то ты что хочешь?

dewid1985 commented 9 years ago

Вот это PlatformLogsAdminAuthLogs::dao()->getById(3)

понятно что ошибочка и что такой записи нет но все же он обрамляет в данном случает а в пред идущем не обрамляет

Вот этот вот SQL - запрос Uncaught [there is no such object for 'PlatformLogsAdminAuthLogs' with query == SELECT "logs"."admin_auth_logs"."id", "logs"."admin_auth_logs"."system_user", "logs"."admin_auth_logs"."admin_id", "logs"."admin_auth_logs"."entry_at", "logs"."admin_auth_logs"."login", "logs"."admin_auth_logs"."password", "logs"."admin_auth_logs"."ip", "logs"."admin_auth_logs"."captcha", "logs"."admin_auth_logs"."blocked_ip", "logs"."admin_auth_logs"."date_blocking_ip", "logs"."admin_auth_logs"."black_ip_list_id" FROM "logs"."admin_auth_logs" WHERE ("logs"."admin_auth_logs"."id" = '3')]

Подскажите куда ковырнуть ковырну допишу плиз, знаю что работает видал собственными глазами и сам делал много раз так но тут как то не гладко пошло.

AlexeyDsov commented 9 years ago

Теоретически достаточно исправить в Dialect метод quoteTable что на что-то вроде

return implode(
    '.',
    array_map(
        function($tablePart) { return '"'.$tablePart.'"'; },
        explode('.', $table)
    )
);
AlexeyDsov commented 9 years ago

Вот тока сходу не предположу насколько это суровый хак выходит и возможны ли где-то в других местах кода ошибки связанные с этим

dewid1985 commented 9 years ago

Алексей огромное спасибки помогло, будут баги связанные с текущем хаком обязательно информирую.

AlexeyDsov commented 9 years ago

Не будет багов - с вас Pull request. Пожалуй это лучший способ добавить работу со схемоами для Postgresql.

dewid1985 commented 9 years ago

Огромное спасибо за мной не заржавеет Pull request. Но для начала поюзаю. Что бы сразу не накосячить ))))

dewid1985 commented 9 years ago

Хочу помочь Вам с документацией но скорее после нового года. Еще не заюзал веточку NS