These are chat archives for LaravelRUS/chat

25th
Apr 2017
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:00
ну например с репликой иногда печаль
плюс невозможно сделать "половинчатый" дамп
у тебя, например БД на несколько гигов, а локально для тестов они все тебе не нужны
а нельзя
придётся всё качать
плюс требуется создание сущностей в строго определённом порядке
т.е. всякие фикстуры\сидеры придётся жёстко писать, а от каких-нибудь alice-фикстур вообще отказаться
ну и т.д.
т.е. жить можно, но очень много проблем доставляют
Roman
@RomanKolosov
Apr 25 2017 00:02
не работал пока с базами в таблицах которых больше 10к записей, впрочем возможно в дальнейшем и откажусь, но диплом это штука такая...)
заставляют документацию по сути своими словами переписывать, по мне так маразм...
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:04
@SerafimArts чем это первичные ключи плохи?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:04
ах да, и с миграциями жопа будет
@Nuboskill_twitter хз, первичный ключ нужен
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:05
чет странный аргумент, не увидел в них ничего плохого
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:05
@Nuboskill_twitter в ком?
Roman
@RomanKolosov
Apr 25 2017 00:05
кстати а ещё вопрос по поводу тестов, как можно веривифицировать приложение на ларе с минимальными затратами по времени, конечно можно юнит тесты писать, но чёт я не предполагал объём работ которые мне надо выполнить, и если это юнит тестами делать, отдельный диплом получается...
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:05
в первичных ключах
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:05
@Nuboskill_twitter а кто тут что-то говорил о первичных ключах?
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:06

форейгн ключи - это плохо

дратути

Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:06
@RomanKolosov минимальные затраты - функциональные тесты
@Nuboskill_twitter форейгн - это не первичные
давай, дотвидания
:D
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:06
а тьфу, этож внешний))0
Roman
@RomanKolosov
Apr 25 2017 00:06
@SerafimArts а можешь пример скинуть адекватных тестов?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:06
@RomanKolosov хммм
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:07
ну даже так, чем внешний ключ плох?)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:07
функциональные только на работе
@Nuboskill_twitter я написал уже выше чем
Roman
@RomanKolosov
Apr 25 2017 00:07
@SerafimArts я не тороплюсь у меня ещё месяц)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:07
с репликой печаль, на каждой миграции будут костыли, жопа манипуляцией большими объёмами
Roman
@RomanKolosov
Apr 25 2017 00:07
@SerafimArts до тестов ещё 40% функционала писать и переписывать)
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:08
хз, перечитал эти проблемы, это и не проблемы вовсе, разве что дамп... но тут опять же из кжадой ситуации не сложно выход найти
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:08
@Nuboskill_twitter это как раз проблемы
особенно п1
да и п3
Roman
@RomanKolosov
Apr 25 2017 00:09
@SerafimArts о боги, и это 1 экшен?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:09
@RomanKolosov это 3 экшена =(
ну это все тесты на то, что страница регистрации работает
не полные, конечно, но всё же
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:10
@SerafimArts ну я как-то с ними не сталкивался, может вопрос в построении бд или подхода, хз даж)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:10
ну я же говорю, что в теории форегйн ключики - божественны
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:10
я про практику говорю)
Roman
@RomanKolosov
Apr 25 2017 00:11
@SerafimArts чёт я попал походу у меня моделей только 14
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:11
а зачем тебе в дипломе юнит тесты писать?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:11
так не юниты
функциональные
Roman
@RomanKolosov
Apr 25 2017 00:12
@Nuboskill_twitter необходимо доказать комиссии что моё приложение полностью рабочее, как это ещё сделать, и да кстати я не пишу визуалку вообще, только серверную часть
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:12
я вообще, если честно, с темой тестов не особо знаком, не занимался пока таким
в след году тоже диплом писать, но я как-то тесты не собирался там писать
ну если визуалку не пишешь, то проблемно, да
у меня то полноценный проект
а что мешает бутстрап хотя бы скачать?
Roman
@RomanKolosov
Apr 25 2017 00:13
@Nuboskill_twitter я тебе так скажу от универа зависит, мне сказали что 40 значимости моего диплома это тестирование
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:13
дефолтная тема думаю удовлетворит все твои нужды в плане простой визуалки
Roman
@RomanKolosov
Apr 25 2017 00:13
@Nuboskill_twitter а зачем оно мне, я пишу под api
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:13
под апи сам бог велел функциональные
Roman
@RomanKolosov
Apr 25 2017 00:13
@Nuboskill_twitter у меня сервер не будет с view работать, только данные
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 00:14
ну если под апи, то да
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:14
1) отправляешь данные\вызываешь метод апи
2) сравниваешь с бд
3) сравниваешь с ответом
покрывает сразу половину функционала
а с юнитами очень муторно каждый метод и каждую строчку проверять на валидность
Roman
@RomanKolosov
Apr 25 2017 00:14
а там должны быть отображены ошибки?
вплане если валидация не прошла или авторизация?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:15
отрицательные тесты тоже нужны
Roman
@RomanKolosov
Apr 25 2017 00:16
@SerafimArts вообщем если не сложно, можешь как время будет свои тесты скинуть посмотреть повнимательнее?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:16
сюда кидай: https://gitter.im/LaravelRUS/offtop =)
Roman
@RomanKolosov
Apr 25 2017 00:18
@SerafimArts имел ввиду что бы ты мне свои ещё скинул, а так то да как до этого дойду непримено на обсуждение выставлю, но это ещё не скоро)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:18
это единственные функциональные, что есть в паблике у меня
Roman
@RomanKolosov
Apr 25 2017 00:20
@SerafimArts ох нет вот это явно уже перебор, при большом желанию не успею мне кажется)
@SerafimArts в любом случае спасибо за наводку, хотя бы масштаб катастрофы уменьшил)
вообщем если я правильно понял то функциональное тестирование для каждого роута прописывается?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:24
функциональные проверяют функционал
внезапно =)
снаружи проверяют
юниты - внутренности
интеграционные почти как функциональные, там по-мелочам отличия
Roman
@RomanKolosov
Apr 25 2017 00:25
@SerafimArts ну по большей части если проверяют снаружи, то у меня нет такого функционала который можно вызвать не через роут
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:25
ещё есть мутационные
ну вот
по-этому сам понимаешь, просто покрываешь каждый роут и всё
1-3 теста на каждый и считай что полное покрытие есть
Roman
@RomanKolosov
Apr 25 2017 00:25
1-3 теста на каждый, о боги =*(
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 00:26
ну вообще больше
1 положительный, один отрицательный, плюс общие
чтобы все отвечали ошибками, когда нет аутентификации
все отвечали ошибками, когда неверный токен
и т.д.
т.е. в теории можно запилить один положительный, а отрицательные общие для всех
ну или нет, хз
Roman
@RomanKolosov
Apr 25 2017 00:29
меня просто пугает что уже где-то 30 роутов, а я ещё дополнительный функционал не реализовывал, кто же знал в ноябре 16 года что довольно простая задача разрастётся до того что получается сейчас))
ладно дойду до этого напишу ещё
опять же спасибо за инфу, доброй ночи
KarmaBot
@KarmaBot
Apr 25 2017 00:29
@RomanKolosov, ну рассказывай. Как жизнь? :)
Sergey Titov
@Nuboskill_twitter
Apr 25 2017 07:25
ребят, как можно узнать тип foreign key'a?
в phpmyadmin именно
в визуальном рекдаторе глянуть
JhaoDa
@jhaoda
Apr 25 2017 07:44
Dmitry
@DmitryChere
Apr 25 2017 08:57

всем привет
как заставить начать работать команды в schedule?
команду создал, в планировщик добавил

protected function schedule(Schedule $schedule)
    {
        $schedule->command('dev:run')->everyMinute();
    }

На сервере файл подключил php "D:\OpenServer\domains\t2f.local\artisan" schedule:run

Но команда сама не выполняется

KarmaBot
@KarmaBot
Apr 25 2017 08:57
Hello, @likeapimp!
Ваня Devium
@webdevium
Apr 25 2017 08:58
/dev/null 2&1 & есть в кроне?
Dmitry
@DmitryChere
Apr 25 2017 09:00
@webdevium нету
Ваня Devium
@webdevium
Apr 25 2017 09:01
@DmitryChere так сделай как надо, проверь
Dmitry
@DmitryChere
Apr 25 2017 09:04
@webdevium так получается? schedule:run 1>> /dev/null 2>&1 ?
JhaoDa
@jhaoda
Apr 25 2017 09:08
@DmitryChere так доку почитай
Dmitry
@DmitryChere
Apr 25 2017 09:09
@jhaoda серьезно?
JhaoDa
@jhaoda
Apr 25 2017 09:09
@DmitryChere ага
Dmitry
@DmitryChere
Apr 25 2017 09:23
@webdevium эту часть не нужно дописывать >> /dev/null 2>&1, система потом путь не находит
в общем у меня ошибка в пути к проекту была, все что после schedule:run писать не нужно
Dmitry
@DmitryChere
Apr 25 2017 09:29
@jhaoda ты главное, как обычно, с такой сознательностью говоришь о доке (не учитывая то, что у меня и так по доке сделано)
принцип "не знаю в чем проблема, скажу чтобы читали доку, типа умный"
JhaoDa
@jhaoda
Apr 25 2017 09:29
@DmitryChere угадал!
Dmitry
@DmitryChere
Apr 25 2017 09:31
@jhaoda та че угадывать, я уже пару лет такую картину наблюдаю за тобой
JhaoDa
@jhaoda
Apr 25 2017 09:32
@DmitryChere малацца
Dmitry
@DmitryChere
Apr 25 2017 09:32
@jhaoda угадал
Ваня Devium
@webdevium
Apr 25 2017 09:32
@DmitryChere красава :)
Alexander
@spartaque
Apr 25 2017 09:40
@DmitryChere может потому что это unix путь?
Dmitry
@DmitryChere
Apr 25 2017 09:42
@spartaque что может?
fakefakefake12
@fakefakefake12
Apr 25 2017 09:50
@DmitryChere ты меня извиняй, но в доке ПРИМЕР, и он работает!
Dmitry
@DmitryChere
Apr 25 2017 09:52
@fakefakefake12 почитай выше, я сказал что у меня трабл в пути к проекту был. И в моем случае (openserver + win) это >> /dev/null 2>&1 дописывать не нужно, потому что система потом путь не находит. http://clip2net.com/s/3JQSrU5
fakefakefake12
@fakefakefake12
Apr 25 2017 09:54
Никто же не виноват, что ты на винде разрабатываешь, алсо * * * * * php /path-to-your-project/artisan schedule:run > nul
и даже > NUL 2>&1 пашет
Dmitry
@DmitryChere
Apr 25 2017 09:55
@fakefakefake12 в смысле не виноват? я написал что не нужно дописывать на винде, а не говорил что кто-то в чем-то виноват
projct1
@projct1
Apr 25 2017 11:37

подскажите плз, глюк ли или так должно быть?
есть модель со связью:

    public function timetable()
    {
        return $this->hasMany('App\BarTimetable')->orderBy('day_from')->orderBy('time_from');
    }

при сиде вставляю так:

$bar->timetable()->createMany([
  0 => [
    "id" => "107"
    "day_from" => "1"
    "day_to" => "7"
    "time_from" => "12:00:00"
    "time_to" => null
  ]
]);

и не смотря на то, что id является автоинкрементом и в модели BarTimetable прописан $fillable, в котором отсутствует id, то всё равно айди добавляется не автоинкрементом, хотя должен игнориться

приходится делать костыль $bar->timetable()->createMany(collect($row['timetable'])->except('id')->toArray());
E.Wolf
@wolf-alone
Apr 25 2017 11:44
@rorc то всё равно айди добавляется не автоинкрементом - а чем он добавляется?
projct1
@projct1
Apr 25 2017 11:44
@wolf-alone добавляется в данном случае "id" => "107"
Фрими
@Freemy
Apr 25 2017 11:45
Кстати, народ, а кто нибудь из ныне присутствующих пользуется propel orm?
Nikita
@xenmayer
Apr 25 2017 11:47
@Freemy полгода назад последний раз пользовался
@rorc чет ничего не понял) а если вместо массива всунуть коллекцию?
projct1
@projct1
Apr 25 2017 11:52
🤦🏾‍♂️
@xenmayer fillable знаешь для чего нужен?
Nikita
@xenmayer
Apr 25 2017 11:53
@rorc да. причем тут он?
projct1
@projct1
Apr 25 2017 11:53
@xenmayer при чём тут коллекции?
@xenmayer всё что не в fillable должно игнориться
@xenmayer а в описанном мной примере id не игнорится, хотя его нет в fillable
Фрими
@Freemy
Apr 25 2017 11:56
@xenmayer все хочу перейти окончательно на него..уж очень мне сильно нравится пропел, и не нравится елоквент..
JhaoDa
@jhaoda
Apr 25 2017 11:57
@rorc потому что в сидах и фабриках fillable/guarded игнорятся
projct1
@projct1
Apr 25 2017 11:58
@jhaoda почему? можно как-нибудь сделать чтоб не игнорилось?
JhaoDa
@jhaoda
Apr 25 2017 11:58
@rorc потому что так написано в коде
Nikita
@xenmayer
Apr 25 2017 11:59
@Freemy Как у него с пульсом? Я не помню точно, но вроде бы омертвевший проект. Если брать Laravel, то я бы остался на Eloquent, что - то другое то Doctrine. А чем понравился Propel?
projct1
@projct1
Apr 25 2017 12:00
@jhaoda в коде модели? логики игнорить вообще не вижу пока) всякий шлак может приходить, смысл вручную фильтровать поля когда fillable уже задан
JhaoDa
@jhaoda
Apr 25 2017 12:00
@rorc в коде команды
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:00
кто сталкивался с тем, что в laravel 5.3 не срабатывает вызов роутера типа Route::post('action', 'MainController@action'); а выполняется только код, который непосредственно располагается в web.php??
Nikita
@xenmayer
Apr 25 2017 12:01
@zeusfly1_twitter composer dumpautoload?
JhaoDa
@jhaoda
Apr 25 2017 12:01
@rorc сиды для тестовых данных, там хоть вагон шлака пусть приходит
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:02
@xenmayer, локально все работает...
@xenmayer , а может из за хостинга?
Nikita
@xenmayer
Apr 25 2017 12:04
@zeusfly1_twitter это проблема во время деплоя возникает. что-то забыли видимо. по опыту скорее всего не выполнили composer dumpautoload
Фрими
@Freemy
Apr 25 2017 12:04
@xenmayer они сейчас вроде как пилят 3 версию, не допилив до идеала вторую, доки так себе, приходится курить исходники. Но это все херня на самом деле. Там очень крутой синтаксис по запросам, не хрен-поймешь как в элоквенте, нормально хранится схема базы. Т.е. UsersQuery::create()->findOneByRoleId('asd'); и сразу понятно что он вернет 1 запись с ролью asd. Офигенный генератор моделек, где бизнес-логика к базе и отдельно файлы с моделями разделены, и ненадо ничего выдумывать.. Короче элоквент - неочем, еще и жутко неудобен
Coryphaeus
@cvdeveloper13
Apr 25 2017 12:05
@Freemy А скоупы?
Фрими
@Freemy
Apr 25 2017 12:05
да тоже есть, ща даж может код найду)
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:05
@xenmayer , т.е. надо локально выполнить dumpautoload? а потом заново заливать весь проект?
Nikita
@xenmayer
Apr 25 2017 12:08
@Freemy Тут соглашусь. Синтаксический сахар в названиях методов - доставляет. Насчет всего остального - дело привычки скорее. Если проект не умер и с его интерфейсом приятнее кодить, то не вижу преград)
@zeusfly1_twitter на сервере выполните
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:12
@xenmayer, а как терминалом на сервер подключиться?
Nikita
@xenmayer
Apr 25 2017 12:12
@zeusfly1_twitter у вас vps или shared hosting
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:13
@xenmayer честно говоря впервые это пробую, хостинг: 000webhost.com
Nikita
@xenmayer
Apr 25 2017 12:14
@zeusfly1_twitter уточните у своего хостинг провайдера этот вопрос.
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:16
@xenmayer а может на другой хостинг залить? если знаете, подскажите
@xenmayer кроме того, еще и стандартная процедура авторизации не работает: все та же строка: Internal server error
Фрими
@Freemy
Apr 25 2017 12:20
@zeusfly1_twitter если на хостинге можно логи смотреть то смотрите error.log
а так можно долго гадать без ошибок
Nikita
@xenmayer
Apr 25 2017 12:20
@zeusfly1_twitter Я пользуюсь vscale.io, меня устраивает. Без лога невозможно предположить в чем проблема. Скорее всего Вам нужно пошагово изучить процесс деплоя.
Фрими
@Freemy
Apr 25 2017 12:21
@zeusfly1_twitter можно попробовать добавить в файл public/index.php второй строкой ini_set('display_errors', 1);
на некоторых хостингах помогает глянуть ошибку
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:25
@Freemy , а проблема может быть еще связана с тем, что index.php я перенес в корень (ну вместе с .htaccess + редактирование путей к автолоаду)?
projct1
@projct1
Apr 25 2017 12:28
@jhaoda попытался вначале прописать \Illuminate\Database\Eloquent\Model::reguard();, всё равно выбрасывается Illuminate\Database\Eloquent\MassAssignmentException] даже на поле, которое есть в fillable...
Олег Сайфутдинов
@zeusfly1_twitter
Apr 25 2017 12:31
@xenmayer а vscale.io - это платный хостниг?
Nikita
@xenmayer
Apr 25 2017 12:31
@zeusfly1_twitter да
@rorc почему просто не убрать id из массива?
projct1
@projct1
Apr 25 2017 12:44
@xenmayer id это как пример, таких ключей много и много моделей
E.Wolf
@wolf-alone
Apr 25 2017 12:44
@rorc вопрос всё ещё актуален? Я отходил...
projct1
@projct1
Apr 25 2017 12:44
@wolf-alone да
E.Wolf
@wolf-alone
Apr 25 2017 12:45
@rorc а если $guarded попробовать?
projct1
@projct1
Apr 25 2017 12:46
@wolf-alone не канает тоже (
Coryphaeus
@cvdeveloper13
Apr 25 2017 12:46
@rorc Заверни модель в гист
Фрими
@Freemy
Apr 25 2017 12:47
@zeusfly1_twitter да сотня причин может быть :) нужно смотреть что за ошибка..попробуй вписать стркоу которую я скинул
projct1
@projct1
Apr 25 2017 12:51
@cvdeveloper13 @wolf-alone да как бы проблема ясна, при сидинге модель перестаёт быть защищённой по умолчанию
вопрос в другом, почему она не защищается по команде \Illuminate\Database\Eloquent\Model::reguard();
в таком случае всё равно выбрасывается Illuminate\Database\Eloquent\MassAssignmentException даже на поле, которое есть в $fillable...
Coryphaeus
@cvdeveloper13
Apr 25 2017 12:54
@rorc Лучше один раз увидеть, чем сто раз услышать.
@rorc Вообще в базовом сиде практически всегда прописываю Eloquent::unguard().
projct1
@projct1
Apr 25 2017 12:57
@cvdeveloper13 с 5.2 это по умолчанию уже прописано вроде
почему requard не работает...
projct1
@projct1
Apr 25 2017 13:05
создам иссую, посмотрим что гуру на это скажут)
dskozin
@dskozin
Apr 25 2017 13:33
Здравствуйте! Поделитесь кто-нибудь опытом - какой лучший способ разделения данных клиентов в одной базе данных при разработке SaaS приложения?
KarmaBot
@KarmaBot
Apr 25 2017 13:33
@dskozin, здравствуй.
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 13:34
@dskozin топором?
dskozin
@dskozin
Apr 25 2017 13:36
@SerafimArts Чуть-чуть менее радикально.. Что-нить типа глобал скоупа )
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 13:37
ну просто такой вопрос...
что значит разделение данных клиентов?
каких данных, зачем их разделать?
причём тут вообще saas
и т.д.
JhaoDa
@jhaoda
Apr 25 2017 13:38
@dskozin и почему в этом чате
dskozin
@dskozin
Apr 25 2017 13:40
Постараюсь пояснить: клиенты саас приложения - компании или группы людей. Пользователями этих групп создаются разные данные приложения. Разделение данных - уверенность в том, что данные разных групп не пересекутся, и что пользователи из одной группы не могут получать или изменять данные других групп.
@jhaoda Ответ очевиден полагаю..
JhaoDa
@jhaoda
Apr 25 2017 13:45
@dskozin нет, не очевиден
dskozin
@dskozin
Apr 25 2017 13:47
@jhaoda Окей сделаю очевидным - какой лучший способ разделения данных клиентов в одной базе данных при разработке SaaS приложения на Laravel?
JhaoDa
@jhaoda
Apr 25 2017 13:47
dskozin
@dskozin
Apr 25 2017 13:49
@jhaoda Прошу прощения, а почему? Мой вопрос не по теме Laravel?
JhaoDa
@jhaoda
Apr 25 2017 13:49
@dskozin как ты догадался...
dskozin
@dskozin
Apr 25 2017 13:51
@jhaoda Я так понимаю что здесь следует задавать только те вопросы, в ответ на которые вы можете гневно тыкнуть в мануал?
JhaoDa
@jhaoda
Apr 25 2017 13:51
@dskozin как ты догадался...
dskozin
@dskozin
Apr 25 2017 13:52
@jhaoda Скоро в твоем божественном королевстве останется только один король .. )
Ариведерчи.. )
KarmaBot
@KarmaBot
Apr 25 2017 14:11
@NetkovK, привет, как настроение?
Alexander
@Dualse
Apr 25 2017 14:47
@rorc ты так не делай, а то я могу подумать, что у меня галюны
projct1
@projct1
Apr 25 2017 14:48
@Dualse удали свои сообщения)
Alexander
@Dualse
Apr 25 2017 14:48
@rorc заметаешь следы, чтобы потом @jhaoda не видел?)
projct1
@projct1
Apr 25 2017 14:49
@Dualse ))))))))) да не, я просто нашёл путь
Alexander
@Dualse
Apr 25 2017 14:49
@rorc ->where('column', '=', $value, 'xor')?
projct1
@projct1
Apr 25 2017 14:50
@Dualse нет, у меня там просто двухуровневый рилейшен, я просто в него всё перенёс, короче забей, я поэтому удалил чтоб лишний раз не писать и не объяснять
чтоб чат не засорять так сказать
Alexander
@Dualse
Apr 25 2017 14:50
@rorc мы же не в слаке, тут нету ограничений на сообщения
Shane Matte
@shanematte
Apr 25 2017 15:22
Привет. Подскажите почему не выполняется schedule. Пишет No scheduled commands are ready to run. хотя там 2 задачи
KarmaBot
@KarmaBot
Apr 25 2017 15:22
Будь как дома, @MackayBravo, я ни в чем не откажу. Много мануалов, коль желаешь, покажу :)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 15:23
@MackayBravo время запуска не пришло оных?
Shane Matte
@shanematte
Apr 25 2017 15:24
оных?
время запуска каждую минуту\
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 15:31
ну хз тогда
мб у тебя withoutOverlapping стоит
и в системе есть пиды прошлых процессов
по-этому запуск новых блочится
Maksim (Ellrion) Platonov
@Ellrion
Apr 25 2017 15:37
@MackayBravo так а как ты понимаешь что они не запускаются и так пишут. ты случаем не пытаешься руками запустить schedule:run?
equentor
@equentor
Apr 25 2017 15:50

Товарищи, вопрос возник, конечно могу проверить, но в себе не уверен, боюсь получить неявное для меня поведение.
Я внедряю в контроллер - сервис:

class SomeController extends Controller
{
    private $myService;

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

Код сервиса:

class MyService
{
    public function someServiceMethod(Entity $entity)
    {
        // тут дальнейшая логика
    }
}

После чего в одном из экшенов я вызываю метод сервиса, который в качестве аргумента должен принять сущность (модель), которая обязательно должна быть с данными:

class SomeController extends Controller
{
    private $myService;

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

    public function someAction()
    {
        $enity = Entity::find(1);
        $this->$myService->someServiceMethod($entity);
    }
}

Так вот, вопроса 2:

  1. Если я вызову метод сервиса не передав в него сущность, не отработает ли дабл-диспатчинг (если я правильно понимаю значение термина), в общем не поместит ли ларавелевская магия туда объект типа Entity, но без данных.
  2. Не переопределит ли ларавелевская магия ту модель, что я туда передам, на пустую.

Вопросы, наверное, глупые, но в плане магии я не очень. Надеюсь на понимание и что-бы без троллинга)
Хочу услышать ответ гуру, т.к. я даже если проверю и отдампаю всё на свете - уверен не буду, как это потом вылезет)

KarmaBot
@KarmaBot
Apr 25 2017 15:50
@equentor, чтобы показать длинный листинг кода желательно использовать pastebin-сервис, например gist.github.com или laravel.io/bin.
Alexander
@Dualse
Apr 25 2017 15:56
@equentor А findOrFail использовать нельзя?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 15:57
@equentor в ларе нет магии
всё что там есть реализовано на уровне языка без читов
equentor
@equentor
Apr 25 2017 16:02
@Dualse конечно можно, но хочется понять именно то, что описал в вопросах.
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:02
1) нет
2) нет
в ларе магии нет
equentor
@equentor
Apr 25 2017 16:03
@SerafimArts но тем не менее обычный type-hinting нам вываливает экземпляр класса)
Maksim (Ellrion) Platonov
@Ellrion
Apr 25 2017 16:03
@equentor у тебя же зависимость не в конструкторе у сервиса
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:04
@equentor потому что объект создаётся сквозь контейнер
ты же контроллер не руками создаёшь
equentor
@equentor
Apr 25 2017 16:04
@Ellrion ну допустим в контроллере не обязательно использовать для этого конструктор, можно и в методе указать тип, и он кинет туда объект.
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:04
а указываешь в ларе, а лара видит его, смотрит на список аргументов и проверяет их у себя в массивчике-контейнере
@equentor тоже самое и с методом
лара или ты не вызывают его
Maksim (Ellrion) Platonov
@Ellrion
Apr 25 2017 16:05
@equentor потому что там метод контроллера вызывается через контейнер. у тебя же просто дергается простой метод сервиса
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:05
а говорят контейнеру - "вызови мне метод блабла и подсунь туда что-нибудь"
так что ещё раз повторю, в третий раз - в ларе магии нет
Maksim (Ellrion) Platonov
@Ellrion
Apr 25 2017 16:06
@SerafimArts ну это смотря что называть магией)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:06
там простой: foreach($some->getArguments() ... + if (in_array($this->items, $argument->getTypeHint() ну образно
@Ellrion ну это да
equentor
@equentor
Apr 25 2017 16:07

@SerafimArts т.е. я правильно понимаю, дабл-диспатчинг включается тогда - когда объект создаёт лара, либо метод вызывает лара:

  1. Инициализируется контроллер (срабатывает конструктор)
  2. Отрабатывает роут, который вызывает метод контроллера (опять же ларкой)

И не срабатывает, когда я сам что-либо инициализирую либо вызываю?

Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:08
но всё равно, когда поведение реализовано простыми функциями пыха из стдлиб - это вряд ли магия
@equentor да
для этого контейнер и существует
для слабой связанности в том числе
Maksim (Ellrion) Platonov
@Ellrion
Apr 25 2017 16:09
@SerafimArts ну просто есть же "магические методы"(официальное название) на которых в ларе много чего нарисовано) это можно называть магией
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:09
когда надо одно - будет одно, когда другое - другое
@Ellrion согласен
только в контейнере нет магических методов +))))
хотя мб __call есть
equentor
@equentor
Apr 25 2017 16:10
@SerafimArts а, ну вот, стал чуточку умнее) Спасибо.
Тогда получается, если бы я указал тип в конструкторе сервиса, предварительно указав сервис в конструкторе контроллера, то дабл-диспатчинг отработал бы рекурсивно, и удовлетворил зависимости?
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:11
инъекции в конструктор - это автовайринг =)
equentor
@equentor
Apr 25 2017 16:11
@SerafimArts ну значит не зря пометил, что не факт что понимаю этот термин правильно) пойду-ка погуглю дабл диспатчинг)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:11
ну т.е. эта терминология из спринга ещё пошла

@SerafimArts ну значит не зря пометил, что не факт что понимаю этот термин правильно) пойду-ка погуглю дабл диспатчинг)

@equentor https://en.wikipedia.org/wiki/Double_dispatch

equentor
@equentor
Apr 25 2017 16:15

@SerafimArts тогда на засыпку ещё вброшу вопросец :)
Если у моего сервиса в конструкторе указан какой то тип, но в контроллере тип этого сервиса не указан, и предположим я в каком то экшене делаю

public function action()
{
    $service = new Service();
}

То он мне никакие объекты по типу в конструкторе не инициализирует, а просто пыха пожалуется что не передан требуемый аргумент?
Чисто закрепить, я туговат) А то из за слабого понимания боязно применять тайп-хинтинг порой :D

Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:16
@equentor ты создаёшь сервис?
что ты туда передаёшь?
equentor
@equentor
Apr 25 2017 16:18
@SerafimArts ну допустим там в конструкторе (сервиса) указан какой то тип, но я НЕ передаю требуемый аргумент, то он не будет пытаться подставить туда объект по типу, верно? А просто пожалуется что трбуется аргумент, но его нет.
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:23
@equentor ты в курсе, что чтобы передать аргумент куда-то - надо его передать? +)
equentor
@equentor
Apr 25 2017 16:23
@SerafimArts отлично это понимаю)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:23
ну.... думаю я ответил на твой вопрос?
equentor
@equentor
Apr 25 2017 16:23
@SerafimArts ага, закрыто :) Просто не понимал, по какому принципу где-то лара закидывает объект по типу, а где-то нет. Теперь знаю что только туда закидывает, где она сама вызывает метод/инициализирует объект. Не представляешь как меня просвятил)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:26
@equentor https://www.youtube.com/watch?v=wuiIWqheGY4 as example
equentor
@equentor
Apr 25 2017 16:27
@SerafimArts раза 3 смотрел, ну буду четвертый, ок)
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 16:28
лол
:D
Andrey
@daaner
Apr 25 2017 17:09
ВОПРОС! Есть контроллер, в нем в __бут стоит обращение у таблице БД. миграйт ресет/рефреш кидает ошибку Laravel Base table or view not found: 1146 Table. Как бороться? неужели каждый раз при рефреше комментировать нужно будет?
JhaoDa
@jhaoda
Apr 25 2017 17:13
@Daaner чо за __бут у контроллера?
Andrey
@daaner
Apr 25 2017 17:13
@jhaoda ой просто boot
JhaoDa
@jhaoda
Apr 25 2017 17:13
@Daaner чо за boot у контроллера?
Andrey
@daaner
Apr 25 2017 17:14
    public function boot()
    {
        $this->registerPolicies();

        foreach ($this->getPermissions() as $permission){
            Gate::define($permission->name, function($user) use($permission){
               return $user->hasPermission($permission->name);
            });
        }
    }
и теперь лара без таблицы permission жить не хочет
JhaoDa
@jhaoda
Apr 25 2017 17:14
@Daaner что этот метод делает в контроллере?
Andrey
@daaner
Apr 25 2017 17:15
проверяет права
JhaoDa
@jhaoda
Apr 25 2017 17:15
@Daaner чувак, у контроллера нет метода boot, Если ты сам его придумал и юзаешь, то мы-то тут при чем?
Andrey
@daaner
Apr 25 2017 17:16
опять ошибся, сервис провайдер
AuthServiceProvider
JhaoDa
@jhaoda
Apr 25 2017 17:16
@Daaner ты давай там определись окончательно, а то, может, ещё в чем-нить ошибся. Проверь два раза всё :)
Andrey
@daaner
Apr 25 2017 17:17
сервис провайдер, boot, миграция! теперь точно все
всею вылечил. обернул в код и прошло
if (\Schema::hasTable('table')) { 
                //code
}
Kirill Nesmeyanov
@SerafimArts
Apr 25 2017 18:03
o_0
ты CMS чтоль изобретаешь? xD
Andrey
@daaner
Apr 25 2017 18:21
@SerafimArts ага , джумлу 1,0
просто часто рефреш делаю
NetkovK
@NetkovK
Apr 25 2017 18:54
Всем привет.Вопрос по поводу создания модели. Везде на форумах модель создается просто в контроллере User::create(). Но это же не совсем правильно, если нам нужно будет что-то изменить, то придется править во всех местах. Как я понимаю нужно создать репозиторий и через него создавать. Или может какой-то другой вариант, где можно посмотреть пример с хорошей структурой?
KarmaBot
@KarmaBot
Apr 25 2017 18:54
@NetkovK, и тебе привет ;)
Alexander
@Dualse
Apr 25 2017 19:03
@NetkovK Ну тогда тебе придется везде править передаваемые данные
NetkovK
@NetkovK
Apr 25 2017 19:08
@Dualse можно передавать массив
Alexander
@Dualse
Apr 25 2017 19:09

@NetkovK а массив чего будешь передавать?

'name' => $reqguest->get('name')
'phone' => $reqguest->get('phone')

типа такого?

NetkovK
@NetkovK
Apr 25 2017 19:10
@Dualse ну можно $reqguest->all() или only()
Alexander
@Dualse
Apr 25 2017 19:11
@NetkovK А что тогда тебе мешает сделать?
MyModel::create($request->all());
NetkovK
@NetkovK
Apr 25 2017 19:14
@Dualse ничего, но работа с БД по MVC должна же быть в модели
Alexander
@Dualse
Apr 25 2017 19:15
@NetkovK А сейчас она где?
NetkovK
@NetkovK
Apr 25 2017 19:18
@Dualse в моделе) ну а если нужно не просто присвоить значение, а сделать какое-то вычисление прежде чем записать. То тогда как быть, везде дублировать вычисление глупо. Можно вынести метод, но тоже придется везде его вызывать. Можно использовать сетер(но )
Alexander
@Dualse
Apr 25 2017 19:19
@NetkovK мутатор?
NetkovK
@NetkovK
Apr 25 2017 19:20
да. Можно переопределить метод create. Какой способ лучше всего использовать?
@Dualse может ты знаешь какой-то открытый проект где можно посмотреть структуру
Alexander
@Dualse
Apr 25 2017 19:29
@NetkovK Зачем переопределять create?
NetkovK
@NetkovK
Apr 25 2017 19:30
@Dualse ну а если мне нужно сделать какие-то вычисления перед присвоением. Где это лучше делать?
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:30
@NetkovK Возможно ошибаюсь, однако. Да, модель должна работать с бд. Но это не означает, что там не должна присутствовать логика. Модель должна принимать данные и сохранять их в бд, при этом, если необходимо, данные могут меняться соответственно логике приложения.
@NetkovK Можешь использовать observers к примеру.
То есть создаешь на модель observer и в нем, например при сохранении производишь вычисление и устанавливаешь поле сумма или любую другую логику. Модель не просто работа с бд. С помощью модели необходимо поддерживать целостность данных бд.
NetkovK
@NetkovK
Apr 25 2017 19:34
@cvdeveloper13 и какой способ лучше юзать мутуторы или обсервер?
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:34
Ну к примеру
JhaoDa
@jhaoda
Apr 25 2017 19:35
@cvdeveloper13 модель не может поддерживать целостность данных, даже если она этого очень будет хотеть
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:37
@jhaoda Почему? Например у меня есть итемы заказа и заказ. Если необходимо хранить количество товара в заказе, можно в сеттере итема заказа обновлять количество товара самого заказа.
JhaoDa
@jhaoda
Apr 25 2017 19:37
@cvdeveloper13 к целостности данных это отношения не имеет
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:38
Ну если не установить подобный сеттер, то количество товара просто не будет соответствовать реальному количеству. То есть целостность не сохранится. Конечно можно вытаскивать количество товара из заказа через связи. Но иногда это затратно вычислять это каждый раз при первой необходимости.
И эту логику надо будет перенести в контроллер, если не использовать сеттеры и при этом дублировать код.
JhaoDa
@jhaoda
Apr 25 2017 19:43
@cvdeveloper13 целостность данных может обеспечить только тот, кто их хранит. Кто в текущем контексте обсуждения хранит данные?
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:43
бд)
В текущем контексте реальные данные хранятся в итемах заказа.
JhaoDa
@jhaoda
Apr 25 2017 19:46
@cvdeveloper13 нет, всё же БД. Модель может обеспечивать консистентность данных исключительно в рамках бизнес-логики
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:47
@jhaoda Похоже я спутал понятия целостности и консистентности :smile: Рано ещё холиварить))
JhaoDa
@jhaoda
Apr 25 2017 19:48
@cvdeveloper13 нет, они синонимичны в целом, но дьявол как всегда в деталях
Alexander
@Dualse
Apr 25 2017 19:53

@cvdeveloper13 и какой способ лучше юзать мутуторы или обсервер?

@NetkovK зависит от задач. Я бы не согласился, что обсервер и мутатор служат для выполнения одних зада

Coryphaeus
@cvdeveloper13
Apr 25 2017 19:53
@jhaoda Получается целостность - это неизменность данных. К примеру id'шники в бд не могут быть изменены. Соответственно сохранение целостности данных - их неизменность и типизация. А сохранение консистенции предполагает изменение данных для сохранения консистентности, то есть консистентность предполагает изменение. Правильно понимаю?)
JhaoDa
@jhaoda
Apr 25 2017 19:54
@cvdeveloper13 нет, айдишники можно менять, главное, что бы они везде поменялись. За это, в частности, отвечают транзакции в БД и внешние ключи
Другое дело, что нафиг их менять, если речь про РК...
NetkovK
@NetkovK
Apr 25 2017 19:57
@Dualse можешь пример привести
Coryphaeus
@cvdeveloper13
Apr 25 2017 19:57
@jhaoda Спасибо)
KarmaBot
@KarmaBot
Apr 25 2017 19:57
Спасибо (+1) для @jhaoda принято! Текущая карма +1505.
Alexander
@Dualse
Apr 25 2017 20:01
@NetkovK Если грубо, то
мутатор - при добавление данных в БД, тебе нужно приводить их к определенному ввиду. К примеру номер телефона могут ввести: +7 707 55 66 222 или 8 707 556 62 22 или +7 (707) 55-66-222, в мутаторе очищаешь от лишних символов и приводишь к 77075566222
обсервер - при добавление данных, тебе надо сделать некие действия. К примеру, при изменение статуса заказа, надо уведомить покупателя, или при его создание надо отправить сообщение курьеру, чтобы он его доставил.
Mikhail Sychev
@snutworks
Apr 25 2017 20:03
Всем привет! У меня рейтинг считается через sum через геттер модели, однако мне нужно без доступа к геттеру выбрать из базы все модельки с рейтингом > n, можно вообще как-то сделать условие where на avg? пробовал его джойнить, вышла какая-то хрень, может что-то упустил в документации?
KarmaBot
@KarmaBot
Apr 25 2017 20:03
@snutworks даров!
Coryphaeus
@cvdeveloper13
Apr 25 2017 20:04
@NetkovK Чтобы лучше понять - думаю лучше перечитать доку. Как минимум Observer'ы отслеживают события модели. С помощью них можно вмешаться в процесс сохранения и добавить значение поля например. Или же даже вызвать другое событие. В observer'ах работаешь со всей моделью и они могут являться финальным этапом изменений модели перед обработкой события.