Добро пожаловать

0

Миграции через командную строку

Добавлены консольные команды
https://github.com/visavi/motor/commit/8a97653e629f38721a56f6bcdf866d1b912a1aeb

Для работы необходимо вызвать команду
php motor
// или
./motor

Для примера созданы 2 команды
Выполнение миграций
php motor migrate
Данная команда просканирует директорию /database/migrations, найдет все классы в этой директории и вызовет у каждого класса метод up()

Откат миграций
php motor migrate:rollback
Команда откатывает выполненные раннее миграции

Миграции позволяют поддерживать состояние файловых таблиц в актуальном виде

В директории /database/migrations создан пример файла миграции
0
117
0

Новый класс миграции данных

В ближайшее время будет добавлен новый класс миграции данных
Добавлено создание и удаление таблиц
Добавлен метод before позволяющий сделать вставку перед нужной колонкой
Изменен синтаксис

$migration = new Migration(new Test()); // Необходимо передать нужную модель
// Создание таблицы, создаст файл test.csv с пятью полями
$migration->createTable(function (Migration $table) {
    $table->create('id');
    $table->create('title');
    $table->create('text');
    $table->create('user_id');
    $table->create('created_at');
});

// Удаление таблицы
$migration->deleteTable();

// Изменение таблицы
$migration->changeTable(function (Migration $table) {
    $table->rename('user_id', 'author_id'); // Переименует user_id в author_id
    $table->create('text')->default('Текст')->after('title'); // Создаст колонку text c текстом по умолчанию "Текст" после колонки title
    $table->create('test')->before('id'); // Создаст колонку test перед колонкой id
    $table->delete('title'); // Удалит колонку title
});
0
110
+2

Функция route

Добавлена новая функция route
С помощью нее появилась возможность указывать ссылки на именованные пути
К примеру route('stories') сформирует путь к списку статей (/stories)
Но если сделать список статей главной страницей, то route('stories') вернет уже путь /

Как сделать список статей главной странице
Для этого в файле app/routes.php
// Необходимо закомментировать текущую главную страницу 
//$app->get('/', [HomeController::class, 'index'])->setName('home');

// и поменять
$app->group('/stories', function (Group $group) {
        $group->get('', [StoryController::class, 'index'])->setName('stories');
.....
// на
$app->group('', function (Group $group) {
        $group->get('/', [StoryController::class, 'index'])->setName('stories'); // теперь это главная
.....

Постепенно исправлю и остальные ссылки
0
161
+2

Исправление ошибок

Исправлены некоторые ошибки связанные с битыми ссылками
Исправлена ошибка показа тегов у неактивных или отложенных статей
Добавлены отсутствующие хлебные крошки
Опубликована стабильная версия, которую можно установить через composer одной командой
composer create-project visavi/motor .
или
composer create-project visavi/motor . --no-dev
Без лишних зависимостей

Пишите обо всех найденных ошибках или присылайте исправления
2
212
+2

Отложенная публикация статей

image
image
Для администраторов добавлена возможность публикации отложенных статей
До публикации будет выводится надпись (Видимая только администратору) о том, что статья отложенная
Пользователи эту статью видеть не будут
Дату публикации можно изменить в любой момент

К нужному времени статья автоматически будет доступна к просмотру для всех пользователей
1
151
+1

Добавлена темная тема

Добавлена новая темная тема.
Тема основана на новой функциональности bootstrap 5.3
Все стили меняется с помощью переменных css
Все переменные вынесены в отдельный файл, можно добавить новые или переопределить существующие
Также изменен верхний navbar, добавлено быстрое переключение тем
Пока еще есть недостатки, потихоньку исправляю
0
148
+4

Добавлена модерация статей

Добавлена возможность включения модерации для новых статей
Для этого необходимо запретить публикацию статей через настройки story.active = false

После запрета, все новые статьи после публикации будут скрыты для просмотра на главной и станут активными только после проверки модератором
2
255
0

Добавлены условные выражения

Условные выражения (Conditional clauses)

Иногда вам может понадобиться, чтобы определенный запроса выполнялся на основе другого условия. Например, вы можете захотеть применить where оператор только в том случае, если заданное входное значение присутствует во входящем HTTP-запросе. Вы можете сделать это, используя when метод:

$active = true;

$stories = Story::query()
    ->when($active, function (Story $query, $active) {
        $query->where('active', $active);
    })
    ->get();
0
258
0

Условия запросов (Scope)

Условия запросов (Scope)

Каждый scope — это обычный метод, который начинается с префикса scope. Именно по префиксу ORM понимает, что это scope. Внутрь scope передаётся запрос, на который можно навешивать дополнительные условия.


class Story extends Model
{
    public function scopeActive(Builder $query): Builder
    {
        return $query->where('active', true);
    }
}

Использование:

$stories = Story::query()
    ->active()
    ->paginate($perPage);
0
201
0

Добавлена связь многие ко многим

Добавлена связь многие ко многим (hasManyThrough)
Метод принимает 5 параметров, имя конечного класса, имя промежуточного класса, внешние и внутренние ключи

Внешние и внутренние ключи определяются автоматически, за исключением когда имена полей не совпадают с именами классов

class Story extends Model
{
    public function tags(): Builder
    {
        return $this->hasManyThrough(Tag::class, TagStory::class);
    }
}

Более подробно на странице orm https://github.com/visavi/motor-orm
0
174
Активность
0
В будущем возможно сделаю, пока не получается время выделить 08.09.2023 18:50
0
Вот ещё бы модерацию к комментариям к статьям 02.09.2023 19:39
0
crew, это всего лишь один из способов, чтобы не разрывать цепочку запросов
Можно делать как ты и написал, кому как нравится 23.06.2023 16:49
0
Спорное решение.
Без нее конструкция кажется более читаема (точно всем будет точно понятна), да и причины реализации не ясны - не кажется что без нее написать были какие-то трудности.
...
23.06.2023 12:03
0
Хорошая новость! 20.06.2023 17:28
+1
Самый лучший web-мотор сразу прямо после wap-мотора :respekt 29.08.2022 06:27
+1
Вот это уже совсем другое дело :klass 06.09.2022 10:14
+1
Со временем постараюсь сделать админские настройки 28.12.2022 02:26
+1
Иногда я спрашиваю себя - когда же я освою php, ответ приходит сам собой:

Наверно! В следующей жизни! Когда я стану кошкой, на - на, на на 04.01.2023 03:28
+1
Сейчас хочу сделать чтобы можно было прокинуть роуты в контроллеры, чтобы можно было указывать не ссылки типа /stories имя роута, чтобы легко можно было поменять главную на список статей
Остальное... 07.03.2023 01:42