Armin Rahmati
3 سال پیش توسط Armin Rahmati مطرح شد
11 پاسخ

select option در لاراول

سلام دوستان.
من یه سایت نوبتدهی مشاور نوشتم که ادمین در پنل خود مشخصات مشاور رو به صورت زیر وارد میکنه.

@extends('Admin.master')

@section('title', 'ثبت مشاور جدید')

@section('content')
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<div class="page-header head-section">
    <h2>ایجاد مشاور جدید</h2>
</div>
    <form class="form-horizontal" action="{{ route('doctors.store') }}" method="POST" enctype="multipart/form-data" id="fontList">
        {{ csrf_field() }}
            @include('Admin.section.errors')
        <div class="form-group">
            <div class="col-sm-12">
                <label for="fullName" class="control-label">نام و نام خانوادگی</label>
                <input type="text" class="form-control" name="fullName" id="fullName" placeholder="لطفا نام و نام خانوادگی مشاور را وارد کنید" value="{{ old('fullName') }}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <label for="presentDays" class="control-label">روز حضور</label>
                <input type="text" class="form-control" name="presentDays" id="presentDays" placeholder="لطفا روز حضور مشاور را وارد کنید" value="{{ old('presentDays') }}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <label for="presentHours" class="control-label">ساعت حضور</label>
                <input type="text" class="form-control" name="presentHours" id="presentHours" placeholder="لطفا ساعت حضور مشاور را وارد کنید" value="{{ old('presentHours') }}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <label for="specialty" class="control-label">تخصص</label>
                <input type="text" class="form-control" name="specialty" id="specialty" placeholder="لطفا تخصص مشاور را وارد کنید" value="{{ old('specialty') }}">
            </div>
            </div>
        <div class="form-group">
            <div class="col-sm-12">
                <label for="degree" class="control-label">مدرک تحصیلی</label>
                <input type="text" class="form-control" name="degree" id="degree" placeholder="لطفا مدرک تحصیلی مشاور را وارد کنید" value="{{ old('degree') }}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <label for="images" class="control-label">تصویر مشاور</label>
                <input type="file" class="form-control" name="images" id="images" value="{{ old('images') }}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-12">
                <button type="submit" class="btn btn-success">ثبت</button>
            </div>
        </div>
    </form>
  </div>
@endsection

بلید نمایش مشخصات مشاور ثبت شده.

@foreach($doctors as $doctor)
            <div class="col-sm-4 col-lg-4 col-md-4">
                <div class="thumbnail">
                    <img src="{{ $doctor->images['images'] }}" alt="" style="width: 100%;height: 30vw;object-fit: cover;">
                    <div class="caption ratings">
                        <hr>
                        <h4 class="pull-right">{{ $doctor->fullName }}</h4>
                        <hr>
                        <h6 class="pull-right">مدرک تحصیلی: {{ $doctor->degree }}</h6>
                        <hr>
                        <h6 class="pull-right" style="text-align: justify; text-justify: inter-character;">تخصص: {{ $doctor->specialty }}</h6>
                        <hr>
                        <h6 class="pull-right">ساعت حضور: {{ $doctor->presentHours }}</h6>
                        <hr>
                        <h6 class="pull-right">روز حضور: {{ $doctor->presentDays }}</h6>
                        <hr>
                        <div class="form-group">
                            <div class="col-sm-12">
                                <label for="title" class="control-label">نوع ملاقات</label>
                                <select name="type" id="type" class="form-control">
                                    <option value="hozori" selected>حضوری</option>
                                    <option value="online">آنلاین</option>
                                </select>
                            </div>
                        </div>
                        <p>
                        <form action="/doctor/turn" method="POST">
                            {{ csrf_field() }}
                            <input type="hidden" name="doctor_id" value="{{ $doctor->id }}">
                                <button type="submit" class="btn btn-success pull-right activation" onload="enable()">دریافت نوبت</button>
                        </form>
                    </div>
                </div>
            </div>
        @endforeach

کنترلر ثبت نوبت:

public function turn(Request $request) {
        $doctor = Doctor::find($request->input('doctor_id'));
        Turn::create([
           'user_id' => Auth::user()->id,
            'doctor_id' => $doctor->id,
            'fullName' => $doctor->fullName,
            'specialty' => $doctor->specialty,
        ]);

        return redirect('/user/turns');
    }

حالا قسمتی که کاربر میخواد نوبت خود رو ثبت کنه، می خوام کاری کنم که بین دو گزینه حضوری و آنلاین به دلخواه یکی رو انتخاب کنه و بعد نوبت خود رو ثبت کنه.
در وافع با توجه به اینکه نوع ملاقات در زمان ایجاد یک مشاور نبوده حالا چطور میتونم زمان دریافت نوبت، این مورد رو ثبت کنم؟
باید به چه صورت این کارو انجام بدم؟


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

سلام باز هم من
میتونی از Radio استفاده کنی جذاب تره

<div class="form-group row col-4">
    <div class="col">
        <input type="radio" class="form-check-input" name="type" value="hozori" checked="">
    <label class="form-check-label">حضوری</label>
    </div>
    <div class="col">
        <input type="radio" class="form-check-input" name="type" value="online" >
    <label class="form-check-label">آنلاین</label>
    </div>
</div>

من این قسمت رو اصلا نفهمیدم در واقع چی؟
توضیح خیلی مبهم هست یک مثال بزن شاید بهتر بشه


Armin Rahmati
@arminrahmati999 3 سال پیش مطرح شد
0

@Rp76
مخلصم آقا رضا.
ببینید جدول مشاورها به این صورت هست.

public function up()
    {
        Schema::create('doctors', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->string('fullName');
            $table->string('presentDays');
            $table->string('presentHours');
            $table->string('specialty');
            $table->string('degree');
            $table->text('images');
            $table->string('slug');
            $table->timestamps();
        });
    }

و با توجه به نکته ای که شما گفتین، زمانی که میخوایم نوبت ثبت کنیم با فرم زیر این کار انجام میشه.

@foreach($doctors as $doctor)
                            <div class="col-sm-4 col-lg-4 col-md-4">
                                <div class="thumbnail">
                                    <img src="{{ $doctor->images['images'] }}" alt="" style="width: 100%;height: 30vw;object-fit: cover;">
                                    <div class="caption ratings">
                                        <hr>
                                        <h4 class="pull-right">{{ $doctor->fullName }}</h4>
                                        <hr>
                                        <h6 class="pull-right">مدرک تحصیلی: {{ $doctor->degree }}</h6>
                                        <hr>
                                        <h6 class="pull-right" style="text-align: justify; text-justify: inter-character;">تخصص: {{ $doctor->specialty }}</h6>
                                        <hr>
                                        <h6 class="pull-right">ساعت حضور: {{ $doctor->presentHours }}</h6>
                                        <hr>
                                        <h6 class="pull-right">روز حضور: {{ $doctor->presentDays }}</h6>
                                        <hr>
                                        <div class="form-group row col-4">
                                            <div class="col">
                                                <input type="radio" class="form-check-input" name="type" value="hozori">
                                                <label class="form-check-label">حضوری</label>
                                            </div>
                                            <div class="col">
                                                <input type="radio" class="form-check-input" name="type" value="online" >
                                                <label class="form-check-label">آنلاین</label>
                                            </div>
                                        </div>
                                        <hr>
                                        <p>
                                        <form action="/doctor/turn" method="POST">
                                            {{ csrf_field() }}
                                            <input type="hidden" name="doctor_id" value="{{ $doctor->id }}">
                                            @if(auth()->user()->checkTurns())
                                                <button type="submit" class="btn btn-success pull-right activation" onload="enable()">دریافت نوبت</button>
                                            @endif
                                        </form>
                                    </div>
                                </div>
                            </div>
                            @endforeach

اما مشکلی که هست فیلد type داخل جدول doctor تعریف نشده ولی من میخوام زمانی که کاربر میخواد نوبت ثبت کنه بتونه حضوری یا آنلاین هم انتخاب کن و این فیلد هم وارد جدول نوبتدهی بشه.

که کنترلر قسمت ثبت نوبت هم کد پایین میشه:

public function turn(Request $request) {
        $doctor = Doctor::find($request->input('doctor_id'));
        Turn::create([
           'user_id' => Auth::user()->id,
            'doctor_id' => $doctor->id,
            'fullName' => $doctor->fullName,
            'specialty' => $doctor->specialty,
        ]);

        return redirect('/user/turns');
    }

حالا نکته ای که هست با توجه به کنترلر بالا ایدی کاربر، آیدی مشاوری که کاربر ازش نوبت گرفته، نام کامل مشاور و تخصص مشاور داخل جدول turn ذخیره میشه که مشکلی نیست ولی من میخوام حضوری و آنلاین هم بتونم ثبت کنم، برای این قسمت باید چیکار کنم؟


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

من نمیدونم درست متوجه شدم یا نه
میخوای یچیزی رو ثبت کنی که توی دیتابیس نیست.
خب اطلا دکتر ها نیاز ندارن که type رو داشته باشند
مدل turn باید type رو داشته باشه به جدولت یک enum اضافه کن
با این صورت

$table->enum("type",["online","hozori"])->comment("for chosse visit type");

برای redirect هم بهتره که برای route هایی که داری اسم بذاری بعد redirect کنی

return redirect('/user/turns'); // khob nist
return redirect(route("root"));

این قسمت هم داری اضافه کاری میکنی

$doctor = Doctor::find($request->input('doctor_id'));
$doctor = Doctor::find($request->doctor_id); 

کلا کد بالا از نظر من خوب نیست اگر دکتر رو پیدا نکرد چی؟شاید کاربر اون قسمت رو دستکاری کنه برای این که به مشکل نخوری باید اینکارو کنی

$doctor=Doctor::findOrFail($request->doctor_id); // age peyda nashe 404 mide

فکر نکنم مشکلت رو حل کرده باشه ولی امیدوارم که آموزنده باشه


Armin Rahmati
@arminrahmati999 3 سال پیش مطرح شد
0

@Rp76
بله درست متوجه شدین.
من enum رو به جدول turns اضافه کردم ولی موقع ثبت وقتی هر کردوم رو بزنم، فقط online رو وارد جدول turns میکنه.
داخل ویو به صورت زیر نمایش میدم، درسته؟

<td>{{ $turn->type }}</td>

داخل کنترلر هم که نیازی نیست چیزی اضافه کنم،درسته؟


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
0

به مدلت اضافه کردی type رو؟
فکر کنم قبلا این کارو رو انجام دادی به کرات.

protected $fillable=[
"type"
];

البته میگی فقط online ذخیره میشه
فیلدی که اضافه کردی حالت پیشفرض داره؟
اگر نداره کنترلری که باهاش داری ذخیره اطلاعات انجام میدی رو برام بفرست.
توی کنترلری که داری ذخیره رو انجام میدی داده های های کاربر هم برام ارسال کن.

return $request;

توی حالت عادی اگر چندتا radio یا checkbox داشته باشید با یک اسم، همه رو از یک خانواده درنظر میگیره


Armin Rahmati
@arminrahmati999 3 سال پیش مطرح شد
0

@Rp76
بله type رو به مدل Turn اضافه کردم.
مایگریشن turns:

Schema::create('turns', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->integer('doctor_id');
            $table->string('fullName');
            $table->string('specialty');
            $table->enum('type',['online','hozori'])->comment("for choose visit type");
            $table->timestamps();
        });

مایگریشن doctors:

Schema::create('doctors', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->string('fullName');
            $table->string('presentDays');
            $table->string('presentHours');
            $table->string('specialty');
            $table->string('degree');
            $table->text('images');
            $table->string('slug');
            $table->timestamps();
        });

کنترلر ثبت نوبت

public function turn(Request $request) {
        $doctor = Doctor::findOrFail($request->doctor_id);
        Turn::create([
           'user_id' => Auth::user()->id,
            'doctor_id' => $doctor->id,
            'fullName' => $doctor->fullName,
            'specialty' => $doctor->specialty,
        ]);

        return redirect('/user/turns');
    }

بلید ثبت نوبت هم که بالا فرستادم.


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

سلام
این کنترلرت ارور نمیده باید خدارو شکر کنی
type رو اصلا وارد نکردی


Armin Rahmati
@arminrahmati999 3 سال پیش مطرح شد
0

@Rp76
منظورت اینه کنترلر رو به این صورت بنویسم؟

public function turn(Request $request) {
        $doctor = Doctor::findOrFail($request->doctor_id);
        Turn::create([
           'user_id' => Auth::user()->id,
            'doctor_id' => $doctor->id,
            'fullName' => $doctor->fullName,
            'specialty' => $doctor->specialty,
            'turn' => $doctor->turn
        ]);

        return redirect('/user/turns');
    }

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

نه turn رو باید از کاربر بگیری که ببینی میخواد حضوری بیاد یا انلاین

public function turn(Request $request) {
        $doctor = Doctor::findOrFail($request->doctor_id);
        Turn::create([
           'user_id' => Auth::user()->id,
            'doctor_id' => $doctor->id,
            'fullName' => $doctor->fullName,
            'specialty' => $doctor->specialty,
            'turn' => $request->turn
        ]);

        return redirect('/user/turns');
    }

Armin Rahmati
@arminrahmati999 3 سال پیش مطرح شد
0

@Rp76
همچنان همون مشکل قبلیس.
وقتی مقدار زیر رو return میکنم هیچی برنمیگردونه.

return $request->turn

در کل همون مقدار online رو در جدول turns ذخیره میکنه.


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

این رو باید دیگه دید
اگر برات امکانش فراهم هست بگو با Anydesk بیام بررسیش کنم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام