UNEIGHT
Ну тут короче от проекта зависит
Anonymous
И если это пока еще не поддерживается стандартом RFC 3696, то я думаю тут уже нужно смотреть не хочешь ли ты потерять этого клиента
UNEIGHT
Я только свое мнение высказал
UNEIGHT
Точно так же можно написать просто кастомный месседж типа емейл должен содержать только латиницу и цифры
UNEIGHT
Тут нужно смотреть сколько таких клиентов к тебе прийдет и какова вероятность потери
UNEIGHT
При чем в первую очередь денег бизнеса
Anonymous
согласен
Anonymous
не подскажете, как в сидере заполнить поле user_id в таблице Profile? class UsersTableSeeder extends Seeder { public function run(): void { factory(User::class, 10)->create()->each(function ($u){ $u->profile()->save(factory(Profile::class)->make()); }); } }
Maksim (Ellrion)
нет
Ну вообще должен)
Anonymous
Так он так и заполнит. Нет?
Может что-то слетело, вроде раньше заполнял. Ключи в БД все прописаны, связи тоже.
Anonymous
Так он так и заполнит. Нет?
Может я профиль нужно что-то дописать? $factory->define(Profile::class, function (Faker $faker) { return [ 'birthday' => $faker->date($format = 'Y-m-d', $max = 'now'), 'phone' => $faker->e164PhoneNumber, 'connection' => $faker->realText($maxNbChars = 200, $indexSize = 2), 'country' => $faker->country, 'city' => $faker->address, ]; }); Там поле user_id я не писал, но сидер ошибку пишет
Igor
Может что-то слетело, вроде раньше заполнял. Ключи в БД все прописаны, связи тоже.
еще вариант сделать factory на Profile в котором для поля 'user_id' будет функция возвращающая id юзера
Anonymous
еще вариант сделать factory на Profile в котором для поля 'user_id' будет функция возвращающая id юзера
Мне кажется лучше отталкиваться от пользователя все-таки. Что бы везде ключи парвильные стояли
Anonymous
По коду всё верно. А какую ошибку пишет.
: SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `profiles` (`birthday`, `phone`, `connection`, `country`, `city`, `updated_at`, `created_at`) values (2002-12-05, +6170222480846, CHORUS. (In which the words have got into the garden, and marked, with one finger for the White Rabbit hurried by--the frightened Mouse splashed his way through the door, she walked on in a great., Sao Tome and Principe, 97583 Justyn River Kshlerinton, GA 38605-8822, 2018-07-03 19:07:50, 2018-07-03 19:07:50))
Illia
Такая же ситуация будет?
Anonymous
да и там и там
Anonymous
Пробовал user_id в fillable в модели профиля добавить?
неаписал, но там тоде ошибка что ключи не совпадаю - я всем 1 добавил
Anonymous
не умею писать, но хочу, не могу начать
Maksim (Ellrion)
Ну вообще всё должно работать вот в доке также фигня описана https://laravel.com/docs/5.6/seeding#using-model-factories
Maksim (Ellrion)
М?
Anonymous
Илье писал
Anonymous
Код сработал
Anonymous
'user_id' => function () { return factory(User::class)->create()->id; }
Maksim (Ellrion)
Полная
Illia
ну так понятное дело, что сработало
Illia
но не красиво
Anonymous
И самое интересно, когда писал - думал, что везде все исправил! Был уверен, что все работает. Но оказалось, не сломалось, а не было рабочим)
Igor
Илье писал
тока ж ты смотри, ты либо связи юзай, либо мой код, но не все вместе
Igor
Это лажа
че это вдруг лажа?
Anonymous
тока ж ты смотри, ты либо связи юзай, либо мой код, но не все вместе
Как понимать? Для заполнения прокатит. А что не так ?
Anonymous
но не красиво
Есть еще вариант? Хочу увидеть
Igor
Как понимать? Для заполнения прокатит. А что не так ?
при любом make - у тебя создасться юзер
Maksim (Ellrion)
че это вдруг лажа?
Хз как объяснить если тебе самому не понятно. Это не логично и не по фен-шую скажем так)
Illia
Есть еще вариант? Хочу увидеть
То что Максим выше из доки кидал должно работать
Illia
покажи свои связи
Illia
profile() из модели User
Igor
Хз как объяснить если тебе самому не понятно. Это не логично и не по фен-шую скажем так)
ну вопросы к тейлору в доку https://laravel.com/docs/5.5/database-testing#writing-factories
Illia
profile() из модели User
Чувствуется мне, что лажа там
Igor
Где в доке такое? Не вижу
Relations & Attribute Closures по ссылке че я дал
Illia
Где в доке такое? Не вижу
Об этом речь походу
Maksim (Ellrion)
Ок был не прав
Igor
короч офигенная штука, если с ней разобраться. Когда ничего не передано в user_id то вызовется анонимка, и запустит другую фабрику, а если сам передашь user_id то анонимка не вызовется
Anonymous
+
Maksim (Ellrion)
Но с сэйв от релешена логичнее и должно работать
Maksim (Ellrion)
Странно что ошибка. Я бы разобрался именно в том почему не работает то
Igor
Как понимать? Для заполнения прокатит. А что не так ?
вообщем если сделаешь в отношениях ...->save(factory(Profile::class)->make()) - то создасться дополнительный юзер которого ты не ждешь, надо переопределять Profile::class)->make(['user_id' => null]))
Illia
+
Покажи метод profile() из модели User
Igor
Странно что ошибка. Я бы разобрался именно в том почему не работает то
вот в этом действительно странность, хз почему у него не работало, мож где ключи переопределил
Anonymous
да
public function Profile() { return $this->hasOne('App\Profile'); }
Anonymous
Кратенько. Или вы считаете нужно было user_id указать?
Anonymous
Там вроде в простых случаях автоматом все подхватывается
Igor
Там вроде в простых случаях автоматом все подхватывается
все же ты б лучше пока без моего кода нашел бы ошибку, почему user_id не заполнялся, а потом уже можешь и мой код вставлять
Anonymous
в миграции к профилю $table->foreign('user_id')->references('id')->on('users')->onDelete('restrict');
Anonymous
все же ты б лучше пока без моего кода нашел бы ошибку, почему user_id не заполнялся, а потом уже можешь и мой код вставлять
Я так понимаю, что основная версия - все-таки должно само было заполняться, даже без указания user_id в фабрике, так?
Igor
Угу, т.к. ты использовал связь. Мой вариант - подразумевает то, чтоб ты связь вообщ не использовал. К примеру тебе нужно 10 юзеров с профилями - ты берешь и запускаешь вызов создания 10 профилей и фабрика тебе юзеров сама сделает
Anonymous
вот так должно работать по идее, да
Без описания user_id? /** @var \Illuminate\Database\Eloquent\Factory $factory */ $factory->define(Profile::class, function (Faker $faker) { return [ 'user_id' => function () { return factory(User::class)->create()->id; }, 'birthday' => $faker->date($format = 'Y-m-d', $max = 'now'), 'phone' => $faker->e164PhoneNumber, 'connection' => $faker->realText($maxNbChars = 200, $indexSize = 2), 'country' => $faker->country, 'city' => $faker->address, ]; }); это исправленный вариант. И мне тоже казалось, что работало. Я часто гонял таблицу туда-сюда
Anonymous
Но не работало(
Igor
Но не работало(
вот я тебе и говорю, что ты реши проблему со связями без моего кода, т.к. мой код не использует связи, он лишь нужен для быстрого сидирования
Anonymous
вроде ничего не ломал,
Igor
вроде ничего не ломал,
Оно само :) Выложи полностью код моделей, только на какой-нибудь пастбин, мож че найдем
Leonid
Может кто объяснить, почему это работает: return $model->whereRaw("notes.id in ( select notes1.id from notes as notes1 left join notes as notes2 on notes1.category_id = notes2.category_id and notes1.created_at > notes2.created_at where notes2.id is null)"); А это - нет: $notes = 'notes'; $notesAlias1 = 'notes1'; $notesAlias2 = 'notes2'; return $model->whereIn($notes . '.id', function($query) use ($notes, $notesAlias1, $notesAlias2) { $query->select($notesAlias1 . '.id') ->from($notes . ' as ' . $notesAlias1) ->leftJoin($notes . ' as ' . $notesAlias2 , function($query) use ($notesAlias1, $notesAlias2) { return $query->on($notesAlias1 . '.category_id', '=' , $notesAlias2 . '.category_id') ->where($notesAlias1 . '.created_at', '>' , $notesAlias2 . '.created_at'); }) ->whereNull($notesAlias2 . '.id'); }); Это при том, что в первый вариант запроса я вставил то, что мне сгенерировал второй вариант. У второго варианта не вылезает ошибки, просто он возвращает все айдишники, то есть не фильтрует ничего. Если это может как-то влиять, сам код является критерием для https://github.com/andersao/l5-repository
Есть у кого идеи по данному вопросу?
Anonymous
сломал все нафиг(
Anonymous
все же ты б лучше пока без моего кода нашел бы ошибку, почему user_id не заполнялся, а потом уже можешь и мой код вставлять
Все верно! Ошибка была моя. Попутал названия классов. В файле ProfilesTableSeeder был класс UsersTableSeeder. Исправил. Перегенерировал composer (dump-autoload). Все заработало без анонимки