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

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

26.05.2022, 12:01. Показов 23024. Ответов 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,698
Записей в блоге: 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
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 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
14586 / 9492 / 1361
Регистрация: 21.01.2016
Сообщений: 35,787
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 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru