سلام دوستان.
من واسه users ها جدول زیر رو دارم.
$table->id();
$table->string('firstName');
$table->string('lastName');
$table->string('mobile')->unique();
$table->string('idNumber')->unique();
$table->string('role')->default('user');
$table->string('password');
$table->timestamps();
ادمین این قابلیت رو داره که بیاد دکتر اضافه کنه و میخوام واسه هر دکتر یه عکس هم آپلود کنه و برای ذخیره عکس اومدم یه جدول دیگه به صورت زیر تعریف کردم:
$table->id();
$table->string('image');
$table->timestamps();
حالا چطوری میشه فهمید که کدوم عکس مربوط به کدوم دکتر هست؟
$request->user()->id;
ای دی کاربری رو برمیگردونه که این رکوئست رو ارسال کرده یا به عبارتی ای دی کاربری که لاگین هست الان که میشه همون فردی که دکتر را دکتر کرد .
شما یک فرمی دارید که به واسطه اون دارید یک کاربر رو انتخاب میکنید و میگید این کاربر دکتر بشه، پس ای دی همونو بهش میدید
مثلا من در نظر میگیرم شما یک سلکت باکس گذاشتید با name="doctor" و توش اپشن هایی دارید که مقدار value اونها ای دی کاربر ها هست که یکیش انتخاب میشه تا دکتر بشه پس مقدار userid رو از
$request->doctor
میگیرید.
اگر متوجه نشدید به ای دی تلگرام من پیام بدید تا به سیستمتون بیام
mehdi_shahabbasian
@mehdi.shahabbasian
نیازی به اسم کسی که دکتر رو دکتر کرد ندارم، فقط پس از ثبت دکتر میخوام نام و نام خانوادگی، تخصص، روزهای حضور و ساعت های حضور دکتر رو نمایش بدم.
این چیزی که گفتین دوباره میشه به همون شکلی که اول کار پیش رفتیم و جواب نگرفتم و شما گفتین یه جدول دیگه نیاز دارم.
شاید پاسخ شما همینجا باشد
@mehdi.shahabbasian
یعنی اینطوری؟
$data['user_id'] = $request->user()->id;
$file = $request->file('image');
$file_name = $file->getClientOriginalName();
$file->storeAs('images/image', $file_name, 'public_files');
$data = $request->validated();
$data['image'] = $file_name;
$data['user_id'] = $request->user()->id;
Doctor::create(
$data
);سلام وقت بخیر
اگه بیشتر کاربر هاتون دارای عکس هستند بهتره که در درون یک جدول قسمت imagesUrl رو قرار بدید و عکس ها را در درون اون بارگذاری کنید. اما اگر می خوایهد که به صورت جداگانه باشن باید یک ستون دیگه اضافه کنید به اسم user_id و اگر برای هر کاربر تعداد زیادی عکس دارید از one to many relationship استفاده کنید. اگر به صورت هر دکتر یک عکس هستش به صورت one to one relationship استفاده کنید.
@mehdi.shahabbasian
@arminrahmati999
@mehdi.shahabbasian
درست شد، مرسی که وقت گذاشتین.
چندتا سوال داشتم:
اول اینکه من قسمت تخصص ها رو تغییر دادم و میخوام هر دکتر فقط یه تخصص داشته باشه و به همین خاطر جدولشو حذف کردم و مقادیرشو داخل همون سلکت باکس ثبت دکتر نمایش میدم و واسش یه فیلد داخل جدول دکتر درنظر گرفتم، یعنی جدول دکترم به وصرت زیر شده:
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->string('specialty');
$table->string('degree');
$table->string('image');
$table->timestamps();
من میخوام زمانی که کاربر میخواد نوبت بگیره، روزها و ساعت های حضور دکتر موردنظر بهش نشون داده بشه و هر کدومو میخواد انتخاب کنه، بعد زمانی که یه کاربر میاد از یه دکتر نوبت میگیره، دیگه اون روز و ساعت به کاربرای دیگه نشون داده نشه، برای انجام اینکار باید دیتابیس ساعت و روز رو چطور تعریف کنم؟
من خودم اومدم به صورت جداگانه تعریف کردم.
days
$table->id();
$table->string('days');
$table->timestamps();
hours
$table->id();
$table->string('hours');
$table->timestamps();
روشی که دارم میرم، درسته؟
اول که فراموش نکن خود فیلد user id رو هم بساز
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreignId('user_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->string('specialty');
$table->string('degree');
$table->string('image');
$table->timestamps();
و در رابطه با سوال
این دقیقا همون چالشیه که برنامه نویس باید باهاش دستو پنجه نرم کنه تا حلش کنه و برای همینم بهش میگن برنامه نویس. (این دیگه کار خودته)
تموم شد و رفت
کد کردنش با خودت
@mehdi.shahabbasian
بله کد زیر دقیقا همون user_id رو میسازه، فقط دستورش کمتره.
$table->foreignId('user_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
تشکر بابت راهنمایی، حالا روش کار میکنم، باز نیاز به راهنمایی داشتم مزاحمتون میشم.
@mehdi.shahabbasian
سلام مجدد.
واسه اینکه بتونم قسمت ثبت نوبت رو به درستی هندل کنم واسه ثبت دکتر اومدم 2 جدول دیگه اضافه کردم برای اینکه بدونم چه دکتری چه روزها و چه ساعت هایی حضور داره که به صورت زیر هستن:
Schema::create('day_doctor', function (Blueprint $table) {
$table->id();
$table->foreignId('doctor_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->foreignId('day_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->timestamps();
});
Schema::create('doctor_hour', function (Blueprint $table) {
$table->id();
$table->foreignId('doctor_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->foreignId('hour_id')->constrained()->onDelete('CASCADE')->onUpdate('CASCADE');
$table->timestamps();
});
مدل Doctor:
public function days() {
return $this->belongsToMany(Day::class);
}
public function hours() {
return $this->belongsToMany(Hour::class);
}
حالا موقع نمایش روزهای حضور دکتر باید چیکار کنم که روزهای حضورشو داخل یه فیلد بهم نمایش بده؟
من خودم به صورت زیر نوشتم:
<td>{{ $doctor->days()->days }}</td>
ولی ارور زیر رو بهم نمایش میده:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$days@mehdi.shahabbasian
ارور زیر رو نمایش میده:
htmlspecialchars() expects parameter 1 to be string, array given