Задать вопрос
  • Как одновременно сделать две записи в разных таблицах в Laravel?

    Оборачиваем всё в транзакцию, да и всё. И тогда создадутся либо обе записи, либо ни одной. Так мы не расплодим сироток в случае ошибочных данных.

    Модели:

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Notifications\Notifiable;
    
    class User extends Authenticatable
    {
        use HasFactory, Notifiable;
    
        /**
         * @var array<int, string>
         */
        protected $fillable = [
            'name',
            'email',
            'password',
        ];
    
        /**
         * Получить данные пользователя, связанные с этим пользователем.
         */
        public function userData()
        {
            return $this->hasOne(UserData::class);
        }
    }


    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class UserData extends Model
    {
        use HasFactory;
    
        /**
         * @var array<int, string>
         */
        protected $fillable = [
            'phone_number',
        ];
    
        /**
         * Получить пользователя, которому принадлежат эти данные.
         */
        public function user()
        {
            return $this->belongsTo(User::class);
        }
    }


    Создание записей

    use App\Models\User;
    use App\Models\UserData;
    use Illuminate\Support\Facades\DB;
    use Illuminate\Support\Facades\Hash;
    
    DB::transaction(function () {
        // 1. Создаем пользователя (User)
        $user = User::create([
            'name' => 'Вася Пупкин',
            'email' => 'uasya@fsb.ru',
            'password' => Hash::make('12345'),
        ]);
    
        // 2. Создаем данные пользователя (UserData) и связываем их с пользователем
        $user->userData()->create([
            'phone_number' => '112',
        ]);
    });


    P.S. ИМХО: ненавижу Eloquent и весь паттерн Active Record. Как по мне, вместо него лучше уж просто чистым SQL пользоваться. А вот если нужна мощная ORM, то уж лучше воспользоваться Doctrine. Там вообще такой проблемы нет, и всё делается автоматически.
    Ответ написан
    4 комментария
  • Как сделать lazy load pdf?

    Daemon23RUS
    @Daemon23RUS
    Applications should read a PDF File from its end.

    Чтение startxref решается через httpConnection.setRequestProperty("Range","-300"); (чтение последних 300 байт файла)
    Далее через setRequestProperty вычитывается диапазон с первой/2й/3й
    P.S. Изначально писал сообщение как комментарий к ответу Rsa97, но запостилось как ответ к вопросу, поэтому дополню: Посмотрите в эту сторону. https://github.com/mozilla/pdf.js.git
    PDF.js is fetching the entire PDF file from a server. Can it fetch only the required portions for rendering?
    Actually, PDF.js is doing just that. PDF is a complicated format; in most of the cases, the vital data of a PDF document is located at the end. Depending on browser support and on what web server returns the HTTP Range Requests headers, PDF.js may automatically start using HTTP Range Requests to fetch not-yet-loaded portions of a PDF needed for rendering visible pages, so a document can be rendered without fully loading it.
    Ответ написан
    4 комментария
  • Как обработать 2 одновременных запроса со стороннего сервера?

    Охх... Никогда не думал, что столкнусь с race condition в PHP )))
    В других языках такое решают общим хранилищем данных для всех параллельных потоков и использованием мьютекса.

    Мы же можем воспользоваться инструментами Redis, которые сделали специально для решения таких вещей. У Redis есть специальные флаги, позволяющие использовать атомарные операции. Команда SET с параметрами NX и EX.
    • SET key value NX — установить ключ, только если он Not eXists (не существует).

    • SET key value EX seconds — установить ключ с временем жизни (eXpire) в секундах.

    Комбинация этих двух флагов позволяет создать атомарную операцию "захватить блокировку на N секунд".

    handler.php
    <?php
    
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    
    // 1. Создаем уникальный ключ для этого конкретного запроса
    $lockKey = 'request_lock:' . md5(json_encode($_REQUEST));
    
    // 2. Пытаемся захватить ключ на 10 секунд
    // Эта команда атомарная: только один процесс из двух победит.
    $isLockAcquired = $redis->set($lockKey, '1', ['nx', 'ex' => 10]);
    
    if ($isLockAcquired) {
        // КЛЮЧ НАШ! Делаем свою работу
        try {
            // ... обращаемся к стороннему сервису, запускаем worker.php или ваще что угодно ...
            
            // отвечаем клиенту об успехе операции
            http_response_code(200);
            echo json_encode(['status' => 'success']);
    
        } catch(\Throwable $e) {
            // Освобождаем ключ для будущих запросов в случае ошибки, чтобы не ждать 10с для переотправки.
            $redis->del($lockKey);
            // отвечаем клиенту, что произошла ошибка
            http_response_code(500);
            echo json_encode(['status' => 'error']);
        }
    
    } else {
        // КЛЮЧ УЖЕ КЕМ-ТО ЗАНЯТ. Ничего не делаем.
        // Просто отвечаем клиенту, что все ок или что запрос дублируется.
        http_response_code(429); // Too Many Requests
        echo json_encode(['status' => 'error', 'message' => 'Request already in progress']);
        exit;
    }
    Ответ написан
    7 комментариев
  • Что можно использовать вместо фриланс хабра?

    @r10d10
    Kwork
    FL.ru
    Профи.ру
    ХедХантер,
    Авито
    Фриланс чаты в ТГ

    ...из наших вроде всё
    Ответ написан
    1 комментарий
  • Установил 2 винды на 1 пк, но появились проблемы с дисками, что делать?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Отключите гибернацию - от администратора: powercfg -h off
    Ответ написан
    1 комментарий
  • Установил 2 винды на 1 пк, но появились проблемы с дисками, что делать?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    если в биосе есть фишка выбора загрузочного диска - все решаемо.
    еще вариант в случае винды - EasyBCD ))
    при условии, что каждая версия винды устанавливалась на диск отмеченный загрузочным на момент установки.
    с доступом к hdd (3е устройство?) тоже не должно быть проблем.
    обращайтесь, опыта в таких играх много... но не факт что какой то суперновый биос не окажется слишком заумным и для меня ))

    ps поправил опечатку и сделал кликабельную ссылку..
    бесплатно для личного пользования, снять 2-3 галочки при запусках, потом ни чего навязчивого ))
    линуксовый grub так же все разрулил бы. но нет смысла, если не пользуете мультизагрузку с линукс.. ))

    pps по пунктам, если одно бутовское устройство и не хотите перезаливаться:
    - https://habr.com/ru/news/504090/ (быстрая загрузка, опции в винде)
    - про powercfg - h off написали коллеги, тоже обязательно ))
    - тем не менее, возможны опции аналогичные FatsStartup/FastBoot в биосе, в разделе управления питанием. для чипсетов интел видел точно, в любом случае надо проверить. там же могут быть различные варианты спящего режима. если у вас один загрузочный раздел - следует отключить полностью (или переустановка по моему сценарию - чистая установка на изолированное устройство)
    .. доступ к системным дискам разных версий ос, при соблюдении рекомендаций - абсолютно не проблема. тем более к третьему устройству.
    .. регулярный чек диска, говорит лишь о том, что другая система считает его не корректно закрытым. а это признаки завершения в том или ином "спящем" режиме.
    на этом все. от слова совсем. устраняйте, используйте советы ))
    Ответ написан
    Комментировать
  • Установил 2 винды на 1 пк, но появились проблемы с дисками, что делать?

    Adler_lug
    @Adler_lug
    Ставить две ОС на один комп плохая затея.
    Из-за особенностей работы с дисками современных ОС так часто и бывает.
    Возможно поможет отключение быстрой загрузки в обоих ОС и гибернации.
    Ответ написан
    6 комментариев
  • Где найти команду для стартапа?

    @gleb_kudr
    А я вылью ведро дегтя пожалуй.

    С такой постановкой вопроса:

    >Короче, где и как собрать команду заинтересованных разработчиков человеку, не вхожему в ИТ тусовки и не имеющему знакомых среди программистов нужного профиля?

    Не взлетит.

    Проверено множеством людей уже. Не взлетит и все. Нужно иметь что-то кроме идеи. Это либо деньги, либо опыт в конкретной сфере, либо команда.
    Более того, если вы не сталкивались с ИТ, то у вас не взлетит и с наемными сотрудниками и с подрядчиками. Навешают лапши/кинут/просадят все деньги. Тоже многократно проверено разными людьми. Команда энтузиастов — наименее рискованный путь, вы просто потратите свое время и разбежитесь. Бонусом тут будет приобретение здорового цинизма.

    Отложите свою идею и начните с приобретения профильного опыта.
    Ответ написан
    Комментировать
  • Где найти команду для стартапа?

    denver
    @denver
    Ну что там снова за идея. Ищи тут. Но нас надо заинтересовать.
    Ответ написан
    Комментировать
  • Как правильно возвращать ошибки в своем API, Laravel?

    могу вручную делать return в каждом методе своего API, но это не выглядит правильным

    Почему? Это нормальная практика. Каждый метод - это часть контроллера, а контроллер должен возвращать ответ. Ответ в Laravel должен быть инстансом Response (массив автоматически конвертируется в него).

    если структура изменится, мне придется менять весь свой код

    Для таких случаев Лара предоставляет возможность создать свой собственный тип ответа, например, ApiResponse. Соответственно, после создания будете вызывать в коде как-то так:
    return response()->api($code, $data);
    Все форматирование будете делать в классе ApiResponse.

    Собственно, чтобы создать, регистрируете в сервис-провайдере новый тип response.
    Response::macro('api', function ($code, $data) {
        return new ApiResponse($code, $data);
    });
    Ответ написан
    3 комментария
  • Какие есть недорогие VPS для небольших проектов/разработки?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    poiskvps.ru

    Понятие "недорогой" - качественное, оно у каждого свое. Кому-то и жучка - дорогая машина, а кому-то и ламборджини - недорогая :)
    Ответ написан
    Комментировать
  • Какой почтовый сервер быстро и просто можно использовать для тестирования отправки сообщений на email через laravel на localhost?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Зарегался на яндекс почте посмотрел как подключиться по smtp - профит.
    Ответ написан
    Комментировать
  • Какой почтовый сервер быстро и просто можно использовать для тестирования отправки сообщений на email через laravel на localhost?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Настройки Laravel

    MAIL_MAILER=smtp
    MAIL_HOST=localhost
    MAIL_PORT=25
    MAIL_ENCRYPTION=null


    Программа являющая собой тестовый smtp сервер https://toolheap.com/test-mail-server-tool/
    screenshot.gif

    И всё!

    Запускаем программу, указываем пару настроек (на скрине) и спокойно отправляем почту.
    Если на компьютере установлен почтовый клиент, письма будут автоматически открываться в нём (на самом деле, в любой программе, ассоциированной с eml-файлами) моментально при получении.
    Если выключить программу, можно протестировать ошибки отправки почты.

    Пару лет пользуюсь этой утилитой, всё отлично работает.
    Проблема может быть только в просмотрщике писем, в том смысле, что не все клиенты одинаково отображают письма. Но если вам нужно тестировать отправку и содержимое писем, а не их верстку, то всё отлично.
    Ответ написан
    1 комментарий
  • Можно ли в Беларуси зарегистрироваться в Oracle Cloud Free Tier?

    @rPman
    для free tier хоть у oracle хоть у amazon нужно вводить свою банковскую карту (это такой способ авторизации у них), в этот момент тебе откажут

    если тебе нужна сверх дешевая слабая vps-ка, топай на lowendstock, выбирай машину, смотри, если ли там оплата криптовалютой (а в случае низких цен лучше bitcoin lightning) и пользуйся. Осторожно, сверх дешевые машины 'оверселят не по децки', т.е. будут слабые медленные и не надежные, но всеравно можно под задачу найти очень дешевый вариант, у меня одна машина годами оплачивается по 16$ в год криптовалютой, слабая но скрипты спокойно работают, а 3-баксовая в месяц так вообще отличная (брал для скриптов с высоким сетевым трафиком)
    Ответ написан
    Комментировать
  • Как правильно разместить на сайте полику конф-ии, обработку перс. данных и договор-оферту?

    Lopar
    @Lopar
    системный администратор
    Совершая оплату на сайте, вы соглашаетесь с нижеизложенным: сслыка, ссылка, ссылка.

    Заметным текстом на видном месте. Чтобы нельзя было придраться, что вы нарочно спрятали данную информацию от пользователя.
    Ответ написан
    2 комментария
  • Что я делаю ни так в stmt запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $stmt->bind_param("sss", $login, $password, $email);

    И не храните пароль в открытом виде. Используйте password_hash / password_verify
    Ответ написан
    7 комментариев
  • Можно ли посмотреть какие шрифты используются в макете в figma?

    @Latnove
    Скачайте плагин (Logo Figma -> Plugins -> Browse plugins in Community). Этот плагин называется Font Fascia, когда вы хотите узнать, какие шрифты используются в самом макете, просто нажимаете на этот плагин (путь такой же) и он вам выдается все шрифты которые используются
    Ответ написан
    1 комментарий
  • PHPStorm + GIT. Как настроить игнорирование?

    DevMan
    @DevMan
    Если файл уже под контролем (был ранее добавлен в репозиторий), то .gitignore на нем работать не будет. Что, собственно, и логично.
    Есть два варианта:
    - удалить файл -> закомитить -> добавить в .gitignore -> вернуть файл
    - удалить из индекса (git update-index --assume-unchanged your-file) -> добавить в .gitignore
    Ответ написан
    Комментировать
  • Существуют ли переводчики с бесплатным API?

    @Kirill-Gorelov
    С ума с IT
    яндекс/гугл/промт

    Все они бесплатные. Только у них лиминты есть на переводы.
    Ответ написан
    1 комментарий
  • Vk_api в python?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Изучить основы работы с API и, что самое главное, научиться читать документацию.
    Ответ написан
    Комментировать