• Как хранить и работать с деньгами в коде и базе данных?

    @yoda_code
    Там видно, что число знаков после запятой у них может быть разное. А значит для простоты разработки, все стоит хранить в минимальной дробной денежной единице валюты, осущеставляя конвертацию при выводе (т.е. в int)


    Согласен с полезностью хранения в int. Однако, стоит помнить и о дополнительной точности, а не только о минимальной дробной единице самой валюты. Пример, клиент вносит сумму 0,02 или 2 цента. В базу вы пишете в центах, 0,02×100=2, у вас пойдет 2. Но, что если нужно списать комиссию в 10%? 2×10%=0,2. Понадобится дополнительная точность, т.е. введение дополнительного нуля, делить\умножать на 1000, а не на 100. Или решение этого вопроса другим способом.
    Ответ написан
    Комментировать
  • Почему возникает ошибка в работе Eloquent?

    @yoda_code
    Проверьте.
    protected $fillable = [...]
    В модели Rating. Поле, которое вы пытаетесь обновить или создать должно быть в этом массиве.
    protected $fillable  = [
    'rateable_id', 
    ...
    ]
    Ответ написан
    Комментировать
  • Как в laravel установить кастомную дату в NULL?

    @yoda_code
    Если сделать timestamp не нулевую,

    $table->timestamp('start')

    то Внимание! в бд автоматически будут проставляться дефолтные значения current_timestamp при обновлении модели.

    Для возможности модификации timestamp типа колонки в миграции базы данных:
    Schema::table('my_table', function (Blueprint $table) {
                $table->timestamp('start')->nullable()->change();
    });


    нужно добавить в config/database.php строки:
    use Illuminate\Database\DBAL\TimestampType;
    
    'dbal' => [
        'types' => [
            'timestamp' => TimestampType::class,
        ],
    ],


    Или сделать миграцию прямым запросом к базе данных, тогда ничего менять в конфиге не нужно
    DB::statement('ALTER TABLE my_table MODIFY COLUMN start TIMESTAMP NULL');
    Ответ написан
    Комментировать
  • Как узнать, что работа с файлом остановилась?

    @yoda_code
    Вы описали задачи, но не описали каким образом конкретно их реализуете, какими средствами. Если через вызов внешних команд exec и подобные, то у этой функции есть код ответа, который она получает от внешней программы, как правило если выполнение успешное - код ответа 0.
    Либо вы можете написать дополнительную функцию, которая будет сообщать статус выполнения той или иной задачи в какой-то файл, например, json. А ожидающая программа в цикле может проверять статус завершения, и когда он нужный переходить к другому заданию.
    php последовательный язык и только сейчас переходит к асинхронности постепенно, так что да, команды выполняются одна за другой, ко второй команде не должен переходить, если первая не выполнена или не вернула исключение.
    Ответ написан