Panowie mam pytanie odnośnie zedytowania auth Laravela odnośnie rejestracji.
Obecny kod RegisterController.php
namespace App\Http\Controllers\Auth; use App\{User,Role}; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; class RegisterController extends Controller { use RegistersUsers; protected $redirectTo = '/admin'; public function __construct() { $this->middleware('guest'); } protected function validator(http://www.php.net/array $data) { return Validator::make($data, [ 'user' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); } protected function create(http://www.php.net/array $data) { $user = User::create([ 'user' => $data['user'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); // tu chciałbym dodać id_user = numer generowany } }
$jest = false; do{ $id_user = http://www.php.net/rand(0, 999999999); $id_user = http://www.php.net/str_repeat('0', 9-http://www.php.net/strlen($id_user)) . $id_user; $result = 'SELECT count(`id_user`) FROM users WHERE id_user = '$id_user ' $sql = mysql_query($result); $jest=mysql_num_rows($sql)>0; } while($jest);
Może zamiast tej dziwnej pętli zastosuj UUIDv4 wtedy będziesz miał na 99% unikalną wartość
@Pyton_000 dzięki za podpowiedź nie znałem UUIDv4 - jak już wspomniałeś daje nam to 99% - a przy obecnych 23 tyś users procentowość maleje.
Zatem nadal pozostaje kwestia jak sprawdzić czy ów wylosowany ciąg znajduje się w bazie.
23tyś... dobre sobie U nas aktualnie w jednej z tabel jest... 83 456 092 wierszy z unikalnymi UUID i na razię się tym nie przejmuję
no dobra zastosuję tak jak piszesz ,najwyżej później napiszę , że taki jeden @Pyton_000 na forum mi tak kazał
Przy okazji nie wiem czy to tak kulturalnie , ale wiesz może jak zrobić w laravelu by "to" wyświetlało się tylko na stronie głównej, jeżeli przeklikam to "to" znika
Tak z czystej ciekawosci, bo musze chyba cos przegapiac:
czemu w twoim cudnym algorytmie losowosci ( ) masz
= str_repeat('0', 9-strlen($id_user))
czyli do kazdego wylosowanego usera dodajesz iles tam 0 ktore sa zalezne od wylosowanego id usera a przez to zawsze dla tego id usera beda takie same? Przeciez to juz nie dodaje zadnej unikalnosci
No chyba ze chciales poprostu zawsze miec te sama liczbe cyfr. No ale do tego uzywa sie str_pad()
jeżeli rand wylosował mniej niż 9 cyfr - dopycham reszte zerami.
To tak jak napisalem
Jeszcze pytanie takie z innej beczki.
Odnośnie kodu:
protected function create(http://www.php.net/array $data) { // $data['id_user'] = rand(100, 999999999); $user = User::create([ 'id_user' => 100, 'user' => $data['user'], 'email' => $data['email'], 'password' => bcrypt($data['password']), //'key' => Str::uuid()->toString(), ]); return $user; }
"SQLSTATE[HY000]: General error: 1364 Field 'id_user' doesn't have a default value
Pole jest dodane w modelu protected $fillable = ['id_user'];
czyli rozumiem, że to co wysyłamy z formularza postem z pliku blade przechodzi przez app\User.php i przekazuje do kontrollera RegisterController ?
User::create towrzy encję User na danych z tablicy, zapisuje i zwraca obiekt.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)