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

روابط در لاراول

سلام دوستان.
من داخل سایتم یه سری کاربر هستن که پست ثبت می کنند و یه سری دیگه میان اون پستا رو میخرن که جداولم به صورت زیر هست.
جدول users:

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('role')->default('user');
            $table->string('phone')->unique();
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });

جدول posts:

Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
            $table->string('title');
            $table->string('slug');
            $table->string('category_name');
            $table->string('price');
            $table->string('image');
            $table->text('description');
            $table->timestamps();
        });

جدول orders:

Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
            $table->foreignId('post_id')->constrained()->cascadeOnUpdate()->cascadeOnDelete();
            $table->timestamps();
        });

حالا میخوام اونی که پست منتشر میکنه داخل پنل خودش ببینه که چه افرادی پستشو خریدن که داخل کنترلر به صورت زیر کدمو نوشتم:

$orders = Order::where('post_id', auth()->user()->id)->get();
dd($orders);

ولی نال برمیگردونه.
ممنون میشم راهنمایی کنید.


ثبت پرسش جدید
میلاد
تخصص : برنامه نویس لاراول
@miligram1614 3 سال پیش مطرح شد
0

چرا باید post_id رو با مقدار ایدی یوزرت برابر کنی
معلومه که نال بر میگرده


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

@miligram1614
خب چطور باید بنویسم؟


آرین حیدری
تخصص : طراح رابط کاربری، برنامه‌نویس
@arianhdr 3 سال پیش آپدیت شد
0

با سلام
با تشکر از آقا میلاد عزیز برای پاسخ‌گویی
ممنون می شم اگه متن من رو کامل بخونین هرچند طولانی باشه
خب برای اینکه متوجه خطا بشیم بیاین به منطق SQL یه نگاه بندازیم
SQL یه جدولی از داده رو برای ما نگهداری می کنه، و می شه اونو دقیقاً به جدول روی کاغذ تشبیه کرد
کاری که شما کردید مثل این میمونه که سه تا کاغذ برداشتید روشون جدول کشیدید
یکیش مربوط به کاربر هستش، یکیش مربوط به پست هایی که کاربر انجام می‌ده و یکیشم مربوط به سفارشاتی که انجام می‌شه
اینا هرکدوم یه شناسه دارن که با استفاده از تابعِ $table->id(); این شناسه(ID: IDENTIFIER) تعریف شده که همونطور که پیداست برای شناختن تعریف شده و اینکه شما بتونین با این شناختن ردیف هر جدول رو از دیگری جدا کنین
حالا مشکل کد شما کجاست؟
اینا هرکدوم شناسه مربوط به خودشون رو دارن یعنی شناسه یه ردیف از جدول کاربر حتماً با شناسه داخب یه ردیف از جدول سفارشات یا پست ها برابر نیست اینا هر کدوم مستقل هستن و کاری با هم ندارن
مثل جدول رو کاغذ، شما اگه یه جا یه جدول بکشین الزاماً مشخصاتش با جدول اون یکی صفحه که موضوعاتشونم فرق می کنه برابره؟
auth()->user()->id شناسه حساب کاربری شخصی که الان در سایت شما هست رو برمی‌گردونه و شما اون شناسه رو دارید تو ستون 'post_id' بررسی می کنین در حالی که این ستون مربوط به شناسه پست هاست
حالا کد درست شما چی می شه؟ واقعیتش من نمی دونم شما چی کار می خواین بکنین حدس می زنم می خواین شناسه پست رو بررسی کنین که من یه کدی خدمتتون می دم

DB::table('posts')
    ->whereIn('id', [1, 2, 3]) //شناسه مربوطه را جای اعضای آرایه بگذارید
    ->get();

در نهایتم اینکه من به شخصه خیلی نمی رسم به سایت راکت سر بزنم اگه خواستین سریع‌تر به جواب برسین می تونین وارد روبیکا بشین و نام کاربری منو یعنی arianhei رو جست‌وجو کنین و بهم پیام بدین
و اینکه خیلی از نکات حرفه‌ای رو هم اینجا نمی گم نکات حرفه ای تری خواستین می تونین وارد گروه ما تو روبیکا بشین که اگه بهم پیام بدین و زنده بودم تو گروه اضافه‌اتون خواهم کرد. خودتون متوجه می‌شید چه نکاتی رو می گم


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

کسی میتونه منو راهنمایی کنه؟


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

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