- Laravel background jobs
12345678910
WT форуми -> PHP MySQL ASP.NET -> Laravel background jobs
Създайте нова тема Напишете отговор 
Автор Съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 56
Bonus: 112
Мнения: 755
Мнение 02/05/2018 5:17 pm      Отговорете с цитат


С въображение, хаха.

Пиша от телефона за това ще съм кратък.

Не е нужно да ги попълваш при регистрация. Просто там където ще строиш правиш проверка, ако нямаш записи в тази таблица, означава че всички сгради са ти на 0. Вече като започнеш да строиш си я попълваш за всяка една нова сграда. Оттам нататък ъпдейтваш нивото на сградата, ако съществува вече запис.

Това е лесно с Ларавел като използваш updateOrCreate() метода.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 6
Bonus: 12
Мнения: 141
Мнение 02/05/2018 5:24 pm      Отговорете с цитат


Разделяй таблиците според предназначението им. Например таблицата юзърс трябва да съдържа само данни, отнасящи се за юзърите, таблицата билдингс трябва да съдържа само данни за сградите. Ако започнеш да смесваш данноте, не отива на добре. По-добре направи трета таблица с имотите на юзъра - какви сгради си е купил, кое ниво са и т.н.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1767
Мнение 02/05/2018 5:36 pm      Отговорете с цитат


pix3l написа:
Разделяй таблиците според предназначението им. Например таблицата юзърс трябва да съдържа само данни, отнасящи се за юзърите, таблицата билдингс трябва да съдържа само данни за сградите. Ако започнеш да смесваш данноте, не отива на добре. По-добре направи трета таблица с имотите на юзъра - какви сгради си е купил, кое ниво са и т.н.


Точно това се опитвам да направя, само дето не ми се получава Very Happy .
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 6
Bonus: 12
Мнения: 141
Мнение 02/05/2018 6:47 pm      Отговорете с цитат


Направи го както си знаеш, после като се наложи refactoring ще разбереш къде си сбъркал... даже още по-добре, така придобиваш опит. Very Happy

Даже, ако не ти е проблем, ползвай ORM. Ти се грижиш за обектите и връзката между тях, а ORM-а се грижи за базата с данни, ключове и т.н.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1767
Мнение 02/05/2018 7:45 pm      Отговорете с цитат


Е аз с Eloquent действам, в момента.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 56
Bonus: 112
Мнения: 755
Мнение 03/05/2018 1:15 am      Отговорете с цитат


teroristd написа:
pix3l написа:
Разделяй таблиците според предназначението им. Например таблицата юзърс трябва да съдържа само данни, отнасящи се за юзърите, таблицата билдингс трябва да съдържа само данни за сградите. Ако започнеш да смесваш данноте, не отива на добре. По-добре направи трета таблица с имотите на юзъра - какви сгради си е купил, кое ниво са и т.н.


Точно това се опитвам да направя, само дето не ми се получава Very Happy .


Свикнеш ли.. или по-скоро схванеш ли идеята, ще видиш, че е много по-лесно да си разделиш таблиците и ще е много по-лесно да се работи с тях.
Но само да добавя, че не винаги Eloquent е най-добрия избор. Понякога ще те обърква само и ще се чудиш с часове как да извъртиш нещата, за да го накараш да работи, както искаш и особено, ако искаш да си спестиш броя на заявките.

П.П. Добави си https://github.com/barryvdh/laravel-debugbar този плъгин към ларавел, за да можеш да следиш по-лесно кое кога се рендира, какви заявки точно се изпълняват, какви логове вървят(това в повечето случаи ти трябва да на теб да дебъгваш своя код), какви грешки има и т .н. Абе доста е полезен при разработка.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1767
Мнение 08/05/2018 9:10 am      Отговорете с цитат


Имам един проблем с queue-то. Ако хардкодна данните както съм показал по-долу си работи.

PHP code:

public function handle()
{
MinesLevels::where('user_id', 1)
->update(['gold_mine' => 1]);
}


Обаче ако например вместо 1 за user_id си викам класа не иска да работи. Изобщо в заявките ако стойностите не са хардкоднати не бачка. Къде може да е проблема?

PHP code:

public function handle()
{
MinesLevels::where('user_id', Auth::user()->id)
->update(['gold_mine' => 1]);
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2664
Мнение 08/05/2018 9:50 am      Отговорете с цитат


(Командата) Job-a (поправка) не може да използва auth, така че трябва да си подадеш на самата команда ID-то на логнатия юзър.

Представи си че работят успоредно, а не съвместно с уеб приложението.


class UpdateMineLevels extends Job implements ShouldQueue
{
    private $user_id;

    public function __construct($user_id)
    {
        $this->user_id = $user_id;
    }

    public function handle()
    {
        MinesLevels::where('user_id', $this->user_id)
            ->update(['gold_mine' => 1]);
    }

}

//И после
// Предполагам ползваш trait-a ShouldQueue
//$this->dispatch(new UpdateMineLevels(Auth::user()->id));
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1767
Мнение 08/05/2018 10:32 am      Отговорете с цитат


Ясно, а това само за Auth ли важи или за всички класове зад фасада?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2664
Мнение 08/05/2018 10:40 am      Отговорете с цитат


teroristd написа:
Ясно, а това само за Auth ли важи или за всички класове зад фасада?


Малко те обърках с изречението по-горе, за което се извинявам.

Проблема не е във фасадата, а в сесията. Тъй като този job се изпълнява от cli(?) няма сесия сетната. Затова и няма логнат юзър и Auth::user() е празно.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 83
Bonus: 178
Мнения: 1767
Мнение 08/05/2018 10:44 am      Отговорете с цитат


Значи нещо което използва сесия няма да работи?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2664
Мнение 08/05/2018 10:51 am      Отговорете с цитат


teroristd написа:
Значи нещо което използва сесия няма да работи?


Job-овете работят с различна сесия от уеб приложението (това, което се сервира през http).

Ахаха, "сервира". Very Happy
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12345678910
Страница 6 от 10


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети