Как создать случайное строковое значение для определенного столбца в базе данных в laravel, используя контроллер? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приложение для бронирования, в моей таблице есть столбец с именем reference_no, и я хочу присвоить его случайной строке?Кто-нибудь знает, как это сделать в Laravel?Где я должен поместить код генератора случайных строк?В миграциях или в контроллере?Спасибо за помощь.

Контроллер

public function addBooking(Request $request,$fid){

        $booking = Booking::create([
            'flight_id'=> $fid,
            'mobile_no' => $request->mobile_no,
            'email' => $request->email,
            'seat_no' =>$fid,
            'reference_no' => THIS IS THE COLUMN THAT I WANT TO HAVE A UNIQUE RANDOM STRING,
            //add if you want you add any more column
        ]);

        foreach($request->title as $key => $value){
            BookingDetails::create([
                'booking_id' => $fid,
                'title' => $request->title[$key],
                'fname' => $request->fname[$key],
                'lastname' => $request->lname[$key],
                //other columns
            ]);
        }


    }

Миграция

    public function up()
    {
        Schema::create('bookings', function (Blueprint $table) {
            $table->bigIncrements('booking_id');
            $table->bigInteger('flight_id')->unsigned();
            $table->string('email');
            $table->string('mobile_no');
            $table->integer('seat_no');
            $table->string('reference_no',10)->unique();
            $table->timestamps();
        });

        Schema::table('bookings', function($table) {
            $table->foreign('flight_id')
                  ->references('flight_id')->on('flights')
                  ->onDelete('cascade');
        });
    }


Модель

class Booking extends Model
{
    protected $fillable = [
         'flight_id','booking_id', 'email', 'mobile_no', 'seat_no', 'reference_no',
    ];
}

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

Laravel имеет вспомогательный класс с именем Str для работы со строками.
https://laravel.com/docs/master/helpers

use Illuminate\Support\Str;

$random = Str::random(40);

Обратите внимание, что начиная с Laravel 6, такие вспомогательные функции str_, как str_random() были перемещены в дополнительный пакет laravel/helpers.
https://laravel.com/docs/6.x/upgrade#helpers

composer require laravel/helpers
1 голос
/ 19 сентября 2019

Определите эту функцию для файла helper.php и используйте ее.

helper.php

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

Теперь вы можете использовать ее.и длина должна быть как ваше требование.

$booking = Booking::create([
            'flight_id'=> $fid,
            'mobile_no' => $request->mobile_no,
            'email' => $request->email,
            'seat_no' =>$fid,
            'reference_no' => generateRandomString(8),
            //add if you want you add any more column
        ]);
0 голосов
/ 19 сентября 2019

Я только что нашел решение, поэтому я должен поместить код генератора случайных строк в мой контроллер.Как я понял.Большое спасибо go @ fazinwiraman.

 public function addBooking(Request $request,$fid){

        $booking = Booking::create([
            'flight_id'=> $fid,
            'mobile_no' => $request->mobile_no,
            'email' => $request->email,
            'seat_no' =>$fid,
            'reference_no' => str_random(10),
            //add if you want you add any more column
        ]);

        foreach($request->title as $key => $value){
            BookingDetails::create([
                'booking_id' => $fid,
                'title' => $request->title[$key],
                'fname' => $request->fname[$key],
                'lastname' => $request->lname[$key],
                //other columns
            ]);
        }


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...