Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Обсудите разработку моего фреймворка

26.05.2022, 12:01. Показов 22781. Ответов 308
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех веб-мастеров!

Я разработал свой фреймворк для создания сайтов. На данном этапе он ещё сырой. Осталось доделать контрольную панель(веб-интерфейс для доработок фреймворка прямо на сайте, это почти как админ панель для администрирования сайта, но для разработчика\программиста). Также нет дизайна нужно будет сделать разные блоки\компоненты и хотя-бы пару скинов\тем.

Начал записывать видео с объяснением как что делается. Хочется получать обратную связь от людей кто занимается веб-разработкой. На данном этапе интересуют предложения по настройке контрольной панели и дизайна.

Хочется найти единомышленников кто хочет делать сайты на таком фреймворке, таким могу дать скрипт фреймворка если увижу заинтересованность в сотрудничестве.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2022, 12:01
Ответы с готовыми решениями:

Обсудите моё задание (Страуструп Б.) Последовательности слов
Обсудите моё задание (Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004) 145 ст. задание 11. ...

обсудите решение беспроводной сети...кто чем может...
День добрый...начну с описания ситуации: имеются два объекта примерно на расстоянии 4-5 км...проблема в том ,что нет прямой видимости...

Шел n-й год(n нечетное число).Цифры моего возраста совпадают с двумя последними цифрами года моего рождения.По вводимому n определить наши годы рожден
Program test uses crt; var n,g,d,f:integer; begin clrscr; writeln('vvedite nineshniy god,nechetnii'); readln(n); g:=n mod...

308
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 12:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pgb Посмотреть сообщение
Вас, что как котят носом тыкать надо?
Я выше уже расписал, что те вещи, которые ты показываешь на видео, делаются на пхп так же просто, если не проще. Не ясно, зачем нужна еще прослойка в виде OWNI, которая ничего не дает. Где хеллоу-ворлд с киллер-фичами фреймворка?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
07.03.2023, 12:53  [ТС]
psergee, я ранее приводил массу примеров(того что плохо в существующих решениях) и говорил, что и как было бы лучше и тд. Вы пропускаете это мимо ушей, не конкретно вы, а все кто тут плюются в мою сторону. Больше я не буду ничего объяснять и доказывать. Сделаю скрипты сайтов на своём фреймворке, тогда почувствуете разницу.
Цитата Сообщение от psergee Посмотреть сообщение
Я выше уже расписал, что те вещи, которые ты показываешь на видео, делаются на пхп так же просто, если не проще. Не ясно, зачем нужна еще прослойка в виде OWNI, которая ничего не дает. Где хеллоу-ворлд с киллер-фичами фреймворка?
Я тоже это всё могу на PHP сделать и вы можете сделать на PHP. А вот кто-то этого не может, поэтому я делаю такой способ чтобы всё можно было настраивать в одном месте практически: всё что касается генерации страницы или нескольких, настраивается практически в одном двух файлах, остальное движок всё собирает(подключает макеты разметки, стили к ним, берёт данные из базы, заполняет макеты данными, подключает скрипты при необходимости, шрифты и тд.) и генерирует страницу, кроме того это ускоряет и упрощает разработку. Вы такие тугодумы, что мне об этом приходится писать практически в каждом сообщении. Всё, надоело.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 12:56
Цитата Сообщение от pgb Посмотреть сообщение
psergee, я ранее приводил массу примеров
Где пруфы? Конкретику вы ни разу не приводили. Здесь форум программистов, а не сплетниц: нужен код в качестве примеров, а не слова о том, что "там множество проблем"
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 12:59
Цитата Сообщение от pgb Посмотреть сообщение
я ранее приводил массу примеров
На форуме можно у сообщения взять permalink. Кинь его, плиз. Может, я пропустил где-то.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
07.03.2023, 13:01
Цитата Сообщение от pgb Посмотреть сообщение
Вас, что как котят носом тыкать надо?
я просил не видео, их я уже смотрел. Сухой язык документации нам сладок и приятен, документация где? Пример простого приложения где? вы нас позвали обсудить фреймворк но не показываете его.

Цитата Сообщение от voral Посмотреть сообщение
что фреймворк готов на 97%.... и где?
как и говорил -он будет писаться вечно, чисто для обсуждений и общения.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 13:04
Цитата Сообщение от Welemir1 Посмотреть сообщение
как и говорил -он будет писаться вечно, чисто для обсуждений и общения.
согласен
0
Эксперт .NET
 Аватар для Rius
13375 / 7830 / 1695
Регистрация: 25.05.2015
Сообщений: 23,831
Записей в блоге: 14
07.03.2023, 13:39
Цитата Сообщение от Welemir1 Посмотреть сообщение
как и говорил -он будет писаться вечно, чисто для обсуждений и общения.
По мере разработки сложность нарастает.
А общепринятые меры борьбы со сложностью ТС отвергает.
Закономерным результатом будет отсутствие результата - забрасывание проекта.
Брехня на форуме это уже следствие того, что с кодом ничего не поделать. Языком молоть - не мешки ворочать.
1
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
07.03.2023, 14:33  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
PHP
1
2
$bookeQuery
   ->where('NAME','Яблоко')
Не лаконичнее чем
PHP
1
$this->Base->Load('book',['WHERE' =>  "NAME='Яблоко'")
Хорошо. Давайте посмотрим и сравним всю цепочку функций от запроса до получения результата.
Вот как будет у меня:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// запрос данных в классе узла
$data=$this->Base->Load('book',['WHERE' =>'NAME=Яблоко']);
 
// метод Load в классе работы с сущностью
public function Load(string $name,array $request=[]):Entity{
    if($this->Exist($name)){$this->name=$name;
      $this->dent=&self::$ents[$this->source][$name];
      if(is_null($this->dent))$this->dent=new Portion(
        $this->Data->Portion($name,$this->source)
      );
      $this->driver->Select($this->dent->md,$name,$request);// тут запрос передаётся драйверу MySql
      $this->Sort('');
    }else $this->name='';
    return $this;
 }
// в драйвере работы с базой данных MySql
public function Select(?array &$data,string $table,array $request=[]){
    if($this->Table($table)){
      $this->Execute($this->Request($request),true);// в методе Request формируем Sql запрос
      if(is_null($data)){$sgn=false;
        $data=['fields'=>$request,'values'=>[]];
        if($val=$this->differ['COMMENT']??false)$data['access']=trim($val,'\'');
      }else $sgn=true;
      $arr=$this->Fetch();$kid=isset($request['id']);
      foreach($arr as $key=>$val){
        if($kid){$key=$val['id'];unset($val['id']);}else $key++;
        $data['values'][$key]=$val;
      }
      if($sgn)ksort($data['values']);
    }
  }
// формирование запроса
private function Request(array &$request):string{$sql='';
    $fields=$this->fields;$keys=array_keys($fields);
    if($par=$request['count']??false){
      $fld='COUNT('.$request['count'].')';
    }else{
      if(isset($request['fields'])){$fld=$request['fields'];
        if(!is_array($fld))$fld=[$fld];
        $fld=array_filter($fld,function($val)use($keys){
          return in_array($val,$keys);
        });
      }else if(isset($request['!fields'])){$fld=$request['!fields'];
        $fld=array_filter($keys,function($val)use($fld){
          return !in_array($val,$fld);
        });
      }
      $fld=isset($fld)?'`'.implode('`,`',$fld).'`':'*';
    }
    if($par=$request['WHERE']??false){
      preg_match_all('/(!)?(\w+)([!><=]+)(\w+)(\s?[&|]\s?)?/',$par,$mth);
      foreach($mth[2] as $num=>$key)
        $par=str_replace($mth[0][$num],in_array($key,$keys)?
          $this->Not($mth[1][$num]).' `'.$key.'`'.$mth[3][$num].
          $this->Valid($mth[4][$num],$fields[$key]['TYPE']).
          $this->AndOr($mth[5][$num]):'',$par);
      if($sql)$sql.=' AND';
      $sql.=$par;
    }
    if($par=$request['IN']??false){$mth=[];
      preg_match('/(\w+)\s(.*)/',$par,$mth);
      $par=explode(',',$mth[2]);Valid::Array($par,'INT');
      $sql.=' `'.$mth[1].'` IN ('.implode(',',$par).')';
    }
    if($par=$request['LIMIT']??false){
      $par=explode(',',$par);Valid::Array($par,'INT_S');
      $sql.=' LIMIT '.implode(',',$par);
    }
    $request=$fields;if($sql)$sql=' WHERE'.$sql;
    return $sql='SELECT '.$fld.' FROM `'.self::$table.'`'.$sql.';';
  }
// Мелкие функции для валидации от инекции и тд. опускаю
При этом данные добавляются по ссылке в данные сущности к уже имеющимся если ранее была уже выборка. И с объектом сущности можно работать как с простым объектом. Перебирать через foreach, добавлять поля, данные, изменять, удалять и эти изменения будут автоматически отражены и в базе данных без всяких запросов после отработки скрипта.
Теперь покажи какая цепочка будет у тебя.
PHP
1
$data=$this->Base->Load('book',['WHERE' =>'NAME=Яблоко']);
А такой формат вызова я сделал не для лаконичности, а для простоты составления запроса, без цепочки вызовов метода. Я сторонник того когда нужно удобство то делать удобно, но когда нужна скорость и простота, то я делаю так как будет лучше. Обёртку при желании сделать можно в любое время.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 15:23
Для начала определимся о какой лаконичности мы говорим. Если сравниваем фреймворк с точки зрения разаботчика - пользователя. То лезть внутрь кода вообще не надо
Пример на всем ругаемом битрикс (и даже с примером обращения к отдельным сущностям)
PHP
1
2
3
4
5
6
7
$collection = BookTable::query()
  ->where('NAME','яблоко')
  ->setchCollection();
 
foreach($collection as $item) {
   echo $item->getId(),PHP_EOL;
}
Цитата Сообщение от pgb Посмотреть сообщение
При этом данные добавляются по ссылке в данные сущности к уже имеющимся если ранее была уже выборка.
Не вопрос. Я могу этим управлять. При этом в отличии от твоего, могу вообще на сутки запомнить выборку и не дергать БД
PHP
1
2
3
4
$collection = BookTable::query()
  ->where('NAME','яблоко')
  ->setTtl(86400)
  ->setchCollection();
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 15:46
Цитата Сообщение от pgb Посмотреть сообщение
сравним всю цепочку функций от запроса до получения результата
А что за метрика цепочками вызовов? Проясни.
Цитата Сообщение от pgb Посмотреть сообщение
$this->Base->Load('book',['WHERE' =>'NAME=Яблоко']);
Я пхп не знаю совсем. Но уже в первой строчке я могу сказать то, что, на мой взгляд, является проблемой. Я, как пользователь, твоего фреймворка могу проще простого ошибиться при работе с твоим API. Зачем мне знать, что там есть какие-то ключевые слова where? Зачем мне знать синтаксис условий SQL? Это API не защищает от опечаток ни в запросе, ни в имени полей.. Framework должен предоставлять удобный апи, который минимизирует мои ошибки. А тут я вижу, что мне проще сделать обычный sql-запрос, потому что через
PHP/HTML
1
'book',['WHERE' =>'NAME=Яблоко']
я его уже и написал. Более безопасно это может выглядеть так:
Python
1
Book.objects.get(name='Apple')
Цитата Сообщение от pgb Посмотреть сообщение
$data['values'][$key]=$val;
Жесть... Я правильно понимаю, что получение данных у тебя не ленивое? Почему бы тебе не дать пользователю самому выбирать - формировать что-то в памяти сразу, или просто пройти в цикле и не загружать все записи в память при запросе?
Цитата Сообщение от pgb Посмотреть сообщение
if($this->Table($table)){
А если нет? Как мне понять в вызывающем коде, что все накрылось? Где коды ошибок?
Цитата Сообщение от pgb Посмотреть сообщение
}else $this->name='';
Чтобы понять, что Load не сработал мне name проверять? Это что за фигня?
Цитата Сообщение от pgb Посмотреть сообщение
return $sql='SELECT '.$fld.' FROM `'.self::$table.'`'.$sql.';';
Экранирование для слабаков?

Добавлено через 1 минуту
Ну и стиль кода, конечно, жесть какая-то.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 16:04
Вот твой код, где твоя "киллер фича" - кеширование в рамках одного хита
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
    public function Load(string $name, array $request = []): Entity
    {
        if ($this->Exist($name)) {
            $this->name = $name;
            $this->dent =&self::$ents[$this->source][$name];
            if (is_null($this->dent)) $this->dent = new Portion(
                $this->Data->Portion($name, $this->source)
            );
            $this->driver->Select($this->dent->md, $name, $request);// тут запрос передаётся драйверу MySql
            $this->Sort('');
        } else $this->name = '';
        return $this;
    }
1. Т.е. если между первым запросом и вторым будет вставка - но новая запись не отобразится во второй выборке. К примеру: я перед вставкой хочу проверить нет ли этой новости среди последних 10 новостей новости на эту же тематику,
1.1 запрашиваю 10 новостей, по своим бизнес правилам проверяю список на соответствие - не нашел
1.2 вставляю новость
1.3. запрашиваю список и вывожу... новость где?

2. Это кеширование не зависит вообще от параметров запроса
PHP
1
2
$data=$this->Base->Load('book',['WHERE' =>'NAME=Яблоко']);
$data=$this->Base->Load('book',['WHERE' =>'NAME=Груша']);
Выдаст выборку яблоко

Не ясен смысл свойства dent - оно всегда равно статическому свойству. т.е. вообще от него можно избавится
PHP
1
2
3
4
5
6
7
8
9
10
11
12
    public function Load(string $name, array $request = []): Entity
    {
        if ($this->Exist($name)) {
            $this->name = $name;
            if (is_null(self::$ents[$this->source][$name])) {
                self::$ents[$this->source][$name] = new Portion($this->Data->Portion($name, $this->source));
            }
            $this->driver->Select($this->dent->md, $name, $request);// тут запрос передаётся драйверу MySql
            $this->Sort('');
        } else $this->name = '';
        return $this;
    }
Ну если очень хочется то более лаконично
PHP
1
2
3
4
5
6
7
8
9
10
11
12
    public function Load(string $name, array $request = []): Entity
    {
        if ($this->Exist($name)) {
            $this->name = $name;
            $this->dent =self::$ents[$this->source][$name] ?? new Portion();
            $this->driver->Select($this->dent->md, $name, $request);// тут запрос передаётся драйверу MySql
            $this->Sort('');
        } else {
            $this->name = '';
        }
        return $this;
    }
Балее. У вас все равно происходит запрос в БД. Т.е. если на странице я запрошу 10 раз одну и ту же выборку - физически запрос в БД будет выполнен 10 раз (правда mysql не такой дурной, он чутка поможет)

Select сортирует по ключу, причем в PHP..... Ваще бред какойто. Я запросил сортировку по дате, а мне выдает в каком порядке? Причем записи - ассоциативный массив. Вы вроде про ООП говорили?

Добавлено через 2 минуты
Цитата Сообщение от psergee Посмотреть сообщение
Экранирование для слабаков?
Изюминка в том, что ТС утверждал, что у него был очень успешный и популярный проект, но его потом взломали.... с чего бы это....

Добавлено через 1 минуту
Опечатку допустил в коде. поправчока
PHP
1
2
3
4
$collection = BookTable::query()
  ->where('NAME','яблоко')
  ->setTtl(86400)
  ->fetchCollection();
Добавлено через 10 минут
Даже в этом куске кода много "прекрасного". Как я понимаю первый параметр метода Load - имя таблицы.
И мы сразу заносим его свойство объекта $this->name.. А в построении запроса уже фигурирует статическое свойство класса table. Т.е. все перемешано в безумный клубок. и это не стиль кода особый, это отсутствие понимания ООП, свойств статических и т.п. Костыль на костыле.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
07.03.2023, 16:15  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Вот твой код, где твоя "киллер фича" - кеширование в рамках одного хита
Я твой бред комментировать не буду. Мы говорим о коде, а не обёрточных методах. Я привёл свою цепочку для запроса, теперь приведи как будет у тебя, ты хотел доказательств голимого кода, так давай рассмотрим этот пример до конца. Речь же о фреймворке и том как он будет выполнять запрос. Я показал как у меня будет выполнятся. И не надо уходить в сторону кэширование и прочего, это всё ерунда и реализуется очень просто.

Покажи всю цепочку функций обработки твоего запроса.
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 16:16
Цитата Сообщение от pgb Посмотреть сообщение
Я привёл свою цепочку для запроса, теперь приведи как будет у тебя, ты хотел доказательств голимого кода
Голимость кода не связана с цепочкой вызовов и количеством функций. Но тебе не хватает квалификации этого понять.

Добавлено через 22 секунды
Цитата Сообщение от pgb Посмотреть сообщение
Покажи всю цепочку функций обработки твоего запроса.
Что это покажет?
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 16:19
Я б еще метод Fetch глянул, может там вторая часть магии.. Но вот кусок ниже, это прям "сказка"

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
            $arr = $this->Fetch();
// если во втором параметре Load кроме прочего добавили элемент 'id'
// не важно с каким значением то начинается магия
            $kid = isset($request['id']); 
            foreach ($arr as $key => $val) {
                if ($kid) {
// Брем значение id из текущего элемента
                   $key = $val['id'];
// Удаляем значение id из текущего элемента
                    unset($val['id']);
                } else $key++;
                $data['values'][$key] = $val;
            }
Т.е. если я хочу получить массив элементов где в качестве ключа будет id то я не смогу в выборе получить это значение (в рамках массива) , т.е. если это, например, делаем Rest ти мне эту выборку нужно отдать в формате json. мне придется клeить поле обратно .
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 16:21
voral, это все не важно. Важна цепочка вызовов.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.03.2023, 16:36
Цитата Сообщение от pgb Посмотреть сообщение
Покажи всю цепочку функций обработки твоего запроса.
А так ты о лаконичности кода внутри фреймворка. т.е. не с позиции пользователя?

Тут сравнивать вообще нет смысла. В твоем по сути нет вообще ни какого функционала. Это ка сравнивать велосипед и самолет. А так в любом решение будет абсолютно читабельный код. Да там будет много ветвления, но каждая отдельная функция будет без сайдэффектов (как у тебя). т.е. поведение построителя запросов будет четко прогнозируемым. В твоем случае, оно будет зависеть от того что делали до и после.

Ну ок по крайней мере выяснили что "лаконичность" это про внутренний код, который пользователю абсолютно фиолетов (покане приходится в него лезть).

Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
Мы говорим о коде, а не обёрточных метода
Нет. Ты продивигаешь инструмент и в первую очередь важно то, как с ним взаимодействовать.
А внутрянку ну ее даже нет смысла сравнивать. Т.к. у тебя реализовано минимум функционала который важен и нужен.

Добавлено через 38 секунд
Цитата Сообщение от pgb Посмотреть сообщение
И не надо уходить в сторону кэширование и прочего, это всё ерунда и реализуется очень просто.
Да и я просто показал, что у тебя это сделано криво. И баг просто гарантирован.

Добавлено через 10 минут
Много времени сейчас. После праздника напишу как твой код выглядел бы при нормальном подходе (стараясь придерживаться твоих "подходов"
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
07.03.2023, 16:48  [ТС]
Цитата Сообщение от psergee Посмотреть сообщение
Что это покажет?
А вот посмотрим что это покажет. Вы хотите обсудить код, так давайте обсудим, обёртки это не код, можно обернуть всё что угодно и сделать типа по кошерному, но это всё полная лажа. Давайте ваш код. Потом будем сравнивать.
0
Эксперт .NET
 Аватар для Usaga
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,731
07.03.2023, 16:57
Цитата Сообщение от pgb Посмотреть сообщение
$request=$fields;if($sql)$sql=' WHERE'.$sql;
    return $sql='SELECT '.$fld.' FROM `'.self::$table.'`'.$sql.';';
Мне кажется или тут запрос собирается конкатенацией вместе с параметрами?.. SQL Injection автору сего кода по барабану? Или я чего-то не понимаю тут?
0
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
07.03.2023, 16:59
Цитата Сообщение от pgb Посмотреть сообщение
А вот посмотрим что это покажет.
То есть, ничего.
Цитата Сообщение от pgb Посмотреть сообщение
Вы хотите обсудить код, так давайте обсудим,
Это мы и делаем.
Цитата Сообщение от pgb Посмотреть сообщение
Давайте ваш код
При чем тут мой код? Это ты себя тут выставлешь гением-самоучкой с мега-крутым фреймворком. Так держи планку. Возьми какой-нибудь существующий фреймворк и с ним сравнивай. Тем более, что ты уже писал, что твой быстрее, выше, сильнее. Глядя на твой код, это далеко не так. Скорее, медленнее, неудобнее и глючнее.
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
07.03.2023, 17:34  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Т.е. если я хочу получить массив элементов где в качестве ключа будет id то я не смогу в выборе получить это значение (в рамках массива) , т.е. если это, например, делаем Rest ти мне эту выборку нужно отдать в формате json. мне придется клeить поле обратно .
Ты вообще читать и что написано понимать умеешь?
Цитата Сообщение от pgb Посмотреть сообщение
При этом данные добавляются по ссылке в данные сущности к уже имеющимся если ранее была уже выборка. И с объектом сущности можно работать как с простым объектом. Перебирать через foreach, добавлять поля, данные, изменять, удалять и эти изменения будут автоматически отражены и в базе данных без всяких запросов после отработки скрипта.
Цитата Сообщение от psergee Посмотреть сообщение
Это мы и делаем.
Вы плюётесь просто в мою сторону не давая мне никаких аргументов чем ваш код будет лучше, если вы говорите, что у меня говно. ПОКАЖИТЕ ВАШУ ЦЕПОЧКУ ВЫЗОВОВ

Добавлено через 23 минуты
Цитата Сообщение от voral Посмотреть сообщение
Я б еще метод Fetch глянул, может там вторая часть магии.. Но вот кусок ниже, это прям "сказка"
Чего б понимал.. Метод загрузки может вызывать не только разработчик, но и класс сущности, в котором если сущность имеет связь многие ко многим, то загружаются данные из посреднической таблицы, и эта магия нужна для сопоставления таблицы посредника многие ко многим. Вот мой код более лаконичен и более продуманный. ПОКАЖИТЕ ВАШ КОД.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2023, 17:34

Полное воровство инфы с моего сайта (копия моего сайта)
У меня есть, сайт с видеороликами, зашел в гугл вебмастер посмотрел ссылки на свой сайт смотрю много ссылок с незнакомого домена на мой...

Выбор 3d фреймворка
Приветствую! Стоит задача сделать модель интерьера кухни для браузера. Всякого разного для этих целей добра пруд пруди. После длительного...

Логирование фреймворка
Глупый вопрос. Имеется достаточно сложная (в плане кода) ООП CRM. При выполнении той или иной операции подтягивается туча разных...

Выбор фреймворка
Здравствуйте. Подтянул PHP и созрел для изучения фреймворка. Я понимаю, что вопрос вкуса, но: 1. Какой фреймворк проще для...

Составные фреймворка
Что означают такие составные фреймворка: ● Front Controller ● Loader ● Routing ● Dependency Injection ● ActiveRecord ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
220
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru