@ali.bayat
@mehranmarandi90
@mhyeganeh
سلام
توی جدول users ما 2 نوع اکانت داریم
یکی نمایندگان هستن و یکی هم کاربران هستن
این دو نوع با ستون isadmin تفکیک میشن و اگر مقدار yes باشه یعنی ادمین هست و اگر no باشه یعنی کاربر عادی هست
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->string('email')->unique();
$table->string('mobile', 11)->unique();
$table->enum('is_admin', ['yes', 'no'])->default('no');
$table->string('role', 100)->default('user');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->timestamp('ended_at')->default(\Illuminate\Support\Carbon::now()->addYear());
$table->rememberToken();
$table->timestamps();
});
خب حالا ما یه مشکل داریم و اون اینه که وقتی میخوایم رابطه one to many و belongsTo بزنیم چون هردو طرف از یک جدول هستن نمیدونیم به چه صورت بنویسیمش
مثلا میخوایم بگیم مثلا نماینده ali@gmail.com دارای 20 تا کاربر هست و بلعکس بگیم که مثلا کاربر 1 و 2 و 3و 4 و5 و6 و ... نمایندشون ali@gmail.com هست
چطور اینو پیاده کنیم ؟ و جوری باشه که به راحتی هم بشه جای کاربرا را بین نماینده ها عوض کنیم
مثلا با متد sync
برای ایجاد روابطی که میخوایید به یک کلید خارجی برای هر ردیف نیاز دارید مثلا به اسم. parent_id
و روابط رو با اون مشخص کنید
public function parent()
{
return $this->belongsTo('User', 'parent_id');
}
public function children()
{
return $this->hasMany('User', 'parent_id');
}
سلام
اولا برای فیلد is_admin ترجیحا از نوع boolean استفاده کنید. چون فقط دو حالت داره و خیلی بهینه تر هست.
ثانیا خوب همون طور که بالا اشاره شد، شما باید قبلش یک جوری بگید که این رکورد user متعلق به کدوم نماینده هست تا وقتی خواستیم کاربران یک نماینده رو بگیریم مشخص باشه. الان به هیچ وجه این قضیه شدنی نیست.
یک راهکارش (اگر رابطه شون از نوع One-to-Many هست یعنی هر نماینده چندین کاربر داره و هر کاربر فقط متعلق به یک نماینده هست ) همینه که یک فیلد بعنوان FK تعریف کنید بنام مثل admin_id و آیدی نماینده رو داخلش قرار بدید. برای نماینده ها هم که این فیلد null میشه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟