بخش نظرات و Polymorphic Relations

زمان قرارگیری : 12 تیر 1396
زمان این قسمت : 01:00:55
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1180 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

در این جلسه قصد دارم بصورتی بخش نظرات و پاسخ به نظرات در سایت رو اماده سازی کنم که بشه در 100 بخش دیگه هم از همین جدول برای ثبت نظرات استفاده کرد ، اما این یعنی چی ببینید شما با استفاده از رابطه Polymorphic میتونید به سادگی از یک جدول برای ثبت نظرات بخش مقالات و دوره ها و ... استفاده کنید بدونه این مشکلی برای برگشت اطلاعات داشته باشید . 

رایگان 04:34
برای دسترسی به این دوره نیاز است بصورت نقدی این دوره را خریداری کنید و این دوره بخشی از دوره های اعضای ویژه نمیباشد

تعداد شرکت کنندگان 1180 نفر
قیمت دوره 125000 تومان
وضعیت دوره تکمیل شده
زمان کل دوره 30:19:42
تعداد قسمت‌ها 51
نوع دسترسی نقدی

آفلاین
user-avatar
مدرس دوره حسام موسوی

اول داستان، طراح گرافیک بودم و ۲ سالی به عنوان طراح مشغول بودم، بعد به برنامه‌نویسی علاقمند شدم و الان بیشتر از ۱۰ ساله که عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

سوالات و گفتگو‌ها

سوالات و گفتگو‌ها

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

دورهای پیشنهادی

مشاهده همه دوره ها
آموزش لاراول

آموزش لاراول

فریمورک لاراول یکی از محبوبترین و بهترین فریمورک های حال حاضر برای زبان php می باشد، آموزش لاراول راکت می‌تواند به شکل رایگان به شما لاراول را آموزش د...

آشنایی با امکانات جدید لاراول 6

آشنایی با امکانات جدید لاراول 6

لاراول ۶ به تازگی توسط تیم توسعه دهنده لاراول معرفی شده، ما قصد داریم در این دوره امکانات جدیدی که به واسطه لاراول ۶ در اختیار توسعه دهندگان قرار گرفت...

ساخت Restful Api با Laravel و Lumen

ساخت Restful Api با Laravel و Lumen

به زبان ساده، APIها (مخفف Application Programming Interface) رابط‌هایی نرم‌افزاری هستند که ارتباط بین نرم‌افزارهای مختلف را پیاده‌سازی می‌کنند. در دنی...

آشنایی با امکانات جدید لاراول 5.2

آشنایی با امکانات جدید لاراول 5.2

لاراول 5.2 بزودی به طور رسمی ارائه میشه اما نسخه develop اون چند وقتی میشه که در اختیار کاربران قرار گرفته در این دوره آموزشی سعی میکنیم که امکانات و...

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
آفلاین
user-avatar
جواد کرمی
3 ماه پیش

خب مثل اینکه یکمی توی ارسال دیدگاه عجله کردم😂
مشکل حل شد

آفلاین
user-avatar
جواد کرمی
3 ماه پیش

سلام آقای موسوی
من توی این جلسه قدم به قدم باهاتون پیش اومدم، اما اون قسمتی که میاید و کامنت هارو میگیرید و توی ویو نمایش میدید رو من به این ارور بر میخورم

Call to undefined relationship [comments] on model [App\Comment].
آفلاین
user-avatar
ali mousakhani
3 ماه پیش

وقت بخیر مهندس
من به این ارور برخورد کردم

 (2/2) QueryException

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'commentable_id' cannot be null (SQL: insert into `comments` (`parent_id`, `commentable_id`, `commentable_type`, `comment`, `user_id`, `updated_at`, `created_at`) values (0, , App\course, hghffdfgdfg, 25, 2020-04-30 20:55:02, 2020-04-30 20:55:02))

و اینسپکت هم میگیرم value خالی هست
لطفا راهنمایی کنید با سپاس

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

مشخصه commentable_id شما مقدارش برابر با null هست یعنی مقداری براش قرار ندادید برید با dd تست کنید ببینید کجای کارو اشتباه رفتید

آفلاین
user-avatar
ali mousakhani
3 ماه پیش

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

 public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('parent_id')->unsigned()->default(0);
            $table->boolean('approved')->default(0);
            $table->text('comment');
            $table->integer('commentable_id')->unsigned();
            $table->string('commentable_type');
            $table->timestamps();
        });
    }
آفلاین
user-avatar
ali mousakhani
3 ماه پیش

value نداره

آفلاین
user-avatar
حسام موسوی
3 ماه پیش

ارور شما ربطی به دیتابیس نداره
به تصویری که ارسال کردید توجه کنید بخش commentable_id خالیه !
چک کنید اصلا article در اون صفحه چیزی هست ! وجود داره اصلا چیزی ؟

آفلاین
user-avatar
ali mousakhani
3 ماه پیش

منظورتون رو درست متوجه نشدم این من رو میگید در صفحه article این خط کد رو include کردیم

            @include('home.layouts.comment' , ['comments' => $comments , 'subject' => $article])
@extends('home.master')

@section('content')
        <!-- Blog Post Content Column -->
        <div class="col-lg-8">

            <!-- Blog Post -->

            <!-- Title -->
            <h1>عنوان مقاله</h1>

            <!-- Author -->
            <p class="lead">
                توسط <a href="#">حسام موسوی</a>
            </p>

            <hr>

            <!-- Date/Time -->
            <p><span class="glyphicon glyphicon-time"></span> ارسال شده در ۱۲ خرداد ۹۶</p>

            <hr>

            <!-- Preview Image -->
            <img class="img-responsive" src="http://placehold.it/900x300" alt="">

            <hr>

            <!-- Post Content -->
            <p dir="rtl">بعد از آنکه تیم مدیریت راکت وب تصمیم گرفتند که بخشی از مقاله ها را به موضوع لینوکس اختصاص دهیم، تصمیم گرفتم که از مفاهیم و مقدمات اولیه شروع کنم تا اگر در آینده سراغ مباحث کمی پیشرفته تر رفتیم، منبعی برای خواندن مفاهیم اولیه داشته باشید.</p>

            <p dir="rtl" style="text-align:center"><img alt="" src="/public/images/2017/6/26/linux.jpg"></p>

            <p dir="rtl">لینوکس توی دهه ۹۰ متولد شد و از اون وقت همواره در حال رشد و ترقی بوده، تا جایی که الان به عنوان یک سیستم عامل خانگی ازش استفاده می کنن. برای اون دسته از افرادی که نمی دونن باید بگم که لینوکس تقریبا همه جا هست. تلفن همراه تان را نگاهی بیاندازید، سیستم هوشمند ماشین ها از لینوکس ساخته شدند. وسائل هوشمند آشپزخانه تان هم دقیقا به همین شکل. پس واقعا لینوکس در همه جا حضور داره. البته باید گفت که بیشترین نقش لینوکس در سوپر کامپیوترها، دسکتاپ، سرور و سیستم های تعبیه شده است. اما قبل از آنکه درباره سطح اجرایی لینوکس صحبت بشه باید گفت که لینوکس یک سیستم عامل پایدار، امن و رایگان است.</p>

            <p dir="rtl">خب در این مقاله می خوام که بدون هیچ حاشیه ای، خیلی سریع شما رو با مفهوم لینوکس آشنا کنم.</p>

            <p dir="rtl"><span style="font-size:16px"><strong>لینوکس</strong><strong> </strong><strong>چیست؟</strong></span></p>

            <p dir="rtl">درست مانند سیستم عامل های ویندوز اکس پی و مکینتاش، لینوکس هم یک سیستم عامل محسوب میشه. سیستم عامل از دسته نرم افزار ها محسوب میشه و ارتباط مستقیمی با سخت افزار داره. یعنی یه سیستم عامل می تونه سخت افزار رو کنترل کنه. در لایه بالایی سیستم عامل، کاربر و نرم افزارهای کاربردی قرار داره. پس میشه گفت رابط بین کاربر و سخت افزار هم محسوب می شه. سیستم عامل جزو برنامه های سیستمی به حساب می آد و در نهایت برنامه های کاربردی و … روی سیستم عامل اجرا می شن. بدون داشتن یک سیستم عامل توانایی اجرای برنامه ها رو ندارید.</p>

            <p dir="rtl">سیستم عامل معمولا شامل این مورد ها هستش:</p>

            <p dir="rtl"><strong>Bootloader</strong></p>

            <p dir="rtl"><strong>&nbsp;</strong>برنامه ای هستش که فرایند بوت شدن «بالا آمدن» سیستم رو برای شما انجام میده. بعضی از بوت لودر ها خیلی ساده اند و بعضی ها هم پیچیده. ولی خب در نهایت کار آن ها در لایه منطقی یکی هستش.</p>

            <p dir="rtl"><strong>Kernel</strong></p>

            <p dir="rtl"><strong>&nbsp;</strong>مهمترین قسمت یک سیستم عامل محسوب می شه، در حقیقت ما بهش می گیم، لینوکس. چون خود لینوکس یک کرنل کلی محسوب میشه. کرنل سی پی یو شما رو کنترل میکنه، حافظه اصلی شما رو در اختیار داره و همچنین اجزای دیگه سخت افزار رو می تونه کنترل کنه. کرنل پایین ترین سطح سیستم عامل محسوب میشه.</p>

            <p dir="rtl"><strong>Daemons</strong></p>

            <p dir="rtl">دیمونس در واقع فرایند های پشت زمینه سیستم شما رو در بر می گیره. که معمولا یا در هنگام بوت شدن سیستم شروع به کار میکنه و یا بعد از اینکه به دسکتاپ وارد شدید.</p>

            <p dir="rtl"><strong>Shell</strong></p>

            <p dir="rtl">&nbsp;به احتمال زیاد چیزی به اسم خط فرمان لینوکس رو شنیده باشید. این قسمت رو شل یا پوسته میگن. در واقع جایی هستش که شما می تونید از طریق متن در یک محیط متنی با کامپیوتر ارتباط برقرار کنید. اینجا جاییه که باعث میشه مردم بیشترین ترس رو نسبت به لینوکس پیدا کنند. البته با حضور دسکتاپ های گرافیکی مدرن کمتر برای انجام کارهای روزمره به محیط کامند لاین احتیاج پیدا می کنیم.&nbsp;</p>

            <p dir="rtl"><strong>Graphical Server</strong></p>

            <p dir="rtl">&nbsp;در واقع این قسمت رو میشه یک زیر سیستم به حساب آورد که می تونه گرافیک رو روی صفحه نمایش، نشون بده. اغلب اوقات ما اون رو با اسم X-Server هم می بینیم.</p>
            <hr>

            <!-- Blog Comments -->

            @include('home.layouts.comment' , ['comments' => $comments , 'subject' => $article])

        </div>

        <!-- Blog Sidebar Widgets Column -->
        <div class="col-md-4">

            <!-- Blog Search Well -->
            <div class="well">
                <h4>جستجو در سایت</h4>
                <div class="input-group">
                    <input type="text" class="form-control">
                    <span class="input-group-btn">
                            <button class="btn btn-default" type="button">
                                <span class="glyphicon glyphicon-search"></span>
                        </button>
                        </span>
                </div>
                <!-- /.input-group -->
            </div>

            <!-- Side Widget Well -->
            <div class="well">
                <h4>دیوار</h4>
                <p>طراح گرافیک از این متن به عنوان عنصری از ترکیب بندی برای پر کردن صفحه و ارایه اولیه شکل ظاهری و کلی طرح سفارش گرفته شده استفاده می نماید، تا از نظر گرافیکی نشانگر چگونگی نوع و اندازه فونت و ظاهر متن باشد.</p>
            </div>

        </div>

@endsection
آفلاین
user-avatar
حسام موسوی
3 ماه پیش

با dd تست بگیرید و ببینید $article مقداری داره یا نه

آفلاین
user-avatar
سعید
6 ماه پیش

سلام . خسته نباشید .
توی این جلسه اومدید و بغیر از رابطه پلی مورفیک یک رابطه یک به چند بین یوزر و کامنت ایجاد کردید و ازش هم استفاده کردید ولی توی تیبل کامنت از کلید خارجی استفاده نشد. (فارن کی) ولی سیستم هم درست کار می کرد . سوالم این بود که آیا باید توی تیبل کامنت حتما کلیدخارجی رو تعریف کرد یا نه. چون مثلا توی همین پروژه توی تیبل های دیگه برای روابط یک به چند کلید خارجی تعریف کردیم یه ذره برام جای سوال شد که واقعا روش درستش چی هست ؟ میشه مثل اینجا تعریف نکرد یا حتما باید تعریف کنیم .
چون مثلا وقتی یه یوزر پاک بشه چه اتفاقی باید برای یوزر آیدی بیفته! البته اگه درکم ازش درست بوده باشه.

آفلاین
user-avatar
حسام موسوی
6 ماه پیش

در این نو روابط یعنی رابطه پلی مورفیک نمیتونی عملا کلید خارجی تعریف کنید چون یک جدول رو در اصل دارید به n تا جدول مرتبط میکنید که این قابلیت در خود mysql وجود نداره اما با ترفند لاراول این امکان بوجود اومده ! چون اگر از این ترفند استفاده کنید باید برای هر کدوم از جداول یک جدول کامنت بسازید .
اونی هم که شما میفرمایید مثل محدودیت این داستان هست .
بعد از حذف یک اطلاعات باید چک کنید اگر در این جدول چیزی داشت به شکل کد حذفش کنید

آفلاین
user-avatar
Amir Mosavi
4 ماه پیش

سلام
جناب موسوی اگه من بخوام داخل صفحه اصلی پروژه نظرات ثبت شده + نظرات ثبت شده در episodes ها رو نمایش بدم چطور میتونم از این رابطه استفاده کنم ؟

آفلاین
user-avatar
حسام موسوی
4 ماه پیش

اینکار درستی نیست ولی اگر بخواید چنین کاری انجام بدید ابتدا از طریق دوره جلسات رو با with بر میگردونید و با همون with میاید نظراتی که مربوط به هر جلسه هست رو بر میگردونید

آفلاین
user-avatar
صادق
7 ماه پیش

سلام استاد تو این جلسه دکمه پاسخ ام کار نکرد مجبور شدم از bootstrap 4 استفاده کنم که راست چین bootstrap به هم ریخت یک bootstrap4 rtl میخواستم

آفلاین
user-avatar
حسام موسوی
7 ماه پیش

سلام از این لینک میتونید استفاده بفرمایید
https://github.com/Hesammousavi/bootstrap-v4-rtl

آفلاین
user-avatar
صادق
7 ماه پیش

خیلی ممنون

آفلاین
user-avatar
yuwdsacasoicsd
8 ماه پیش

سلام استاد عزیز! استاد هنگام وارد کردن کد زیر در بخش ArticleController :

 $comments = $article->comments()->where('approved' , 1)->where('parent_id' , 0)->latest()->get();

با ارور زیر برخورد می کنم:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'comments.commnetable_id' in 'where clause' (SQL: select * from `comments` where `comments`.`commnetable_id` = 3 and `comments`.`commnetable_id` is not null and `comments`.`commnetable_type` = App\Article and `approved` = 1 and `parent_id` = 0 order by `created_at` desc)

ممنون میشوم که کمک کنید.
در ظمن ورژن لاراول 6.2 می باشد.

آفلاین
user-avatar
حسام موسوی
8 ماه پیش

این ارور ربطی به ورژن لاراول نداره اصلا
این ارور میگه من ستونی با عنوان commnetable_id رو نمی تونم پیدا کنم ! اصلا در جدول comment شما این ستون رو اضافه کردید ؟

آفلاین
user-avatar
yuwdsacasoicsd
8 ماه پیش

بله استاد میدانم به لاراول ربط نداره فقط خواستم زود تر به نتیجه برسم.
خیلی خیلی ممنون اشتباه تایپی بوده جای n و t را به اشتباه نوشتم. بازم بسیار متشکر.
بابت این دوره هم بسیار متشکرم عالی هست.

آفلاین
user-avatar
Hoss2000
8 ماه پیش

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

آفلاین
user-avatar
حسام موسوی
8 ماه پیش

سلام باید به شکل کد اینکارو انجام بدید چون این روش به شکلی نیست که بتونید یک فیلد رو به یک فیلد دیگه متصل کنید

آفلاین
user-avatar
علیرضا
11 ماه پیش

سلام،

من در پروژه جداگانه ای که دارم تمام ثبت و نمایش کامنتها و زیر کامنتها درسته با این تفاوت که تمام کامنتها برای تمام پست ها نشون داده میشد!

من برای حلش در blade کامنتها این شرطو گذاشتم که اگر commentable_id با articleid یکی نبود کامنتها رو نشان نده (هر دو متغییر در دسترسن) و موضوع حل شد ولی میدونم راه درستی نیست، هربار کلی کامنت پاس داده میشه و ..

کنترلر ارسال کامنتها: (که در واقع کپی کد خودتون هست)

  $comments = $article->comments()->where('approved' , 1)->where('parent_id', 0)->latest()->with(['comments' => function($query) {
            $query->where('approved' , 1)->latest();
        }])->get();

اینجا شرط where('commnentable_id' , $articleid) رو اضافه کردم ، تا فقط کامنت هر پست رو پاس بده اما برای زیر کامنتها (که براش تابع و query تعریف کردین) اثر نمیکنه. بنابراین شرطو برداشتم و در همون blade شرطی رو که گفتم گذاشتم. (میدونم به قول شما جایی درست نیست احتمالا مربوط به روابط مدل ها اما نمیدونم کجا دقیقا.)

آفلاین
user-avatar
حسام موسوی
11 ماه پیش

تمام کامنت‌ها در تمام پست‌ها یعنی چی !!

آفلاین
user-avatar
علیرضا
11 ماه پیش

یعنی مثلا اگر 8 تا کامنت یا زیر کامنت در دیتابیس بود، تمامش رو زیر هر پست نشان میداد! هر پست 8 کامنت داشت!

که خب در مدتی که پاسخ دادین بیشتر مرور کردم و مشکلش رو که مربوط به قسمت آرگومنت های تابع کنترلر بود رفع کردم اما اینبار هم به مشکل دیگری برخوردم.

لطفاً این تصویر رو ببینید. http://uupload.ir/files/9tkz_cc.jpg

این خلاصه ی کنترلر و دو مدل مربوطه هست. همونطور که در پایان کنترلر میبینین از dd استفاده کردم ، که خروجیش همیشه خالیه! اینطوری: item [ ] ! در حالیکه (ظاهرا) همه چیز مرتبه و مدلها و توابع کنترلر درستن و در دیتابیس هم رکورد هست. چرا dd خالی بازگردانده میشه؟

من میتونم مستقیما از مدل Comment کامنتهای دیتابیس رو دریافت کنم ولی مشکل (در تصویر بالا) دقیقا از جایی شروع میشه که به تابع ()comments (واقع در مدل Post) اشاره میکنم و بعد از اون همه چی خالی بازگردونده میشه.

آفلاین
user-avatar
حسام موسوی
11 ماه پیش

شما تست بگیرید اصلا post برگشت پیدا میکنه

آفلاین
user-avatar
علیرضا
11 ماه پیش

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

Public function test (Post $post){

$comment = $post->where('user_id', 1)->latest()  //WORKING!
$comment = $post->comments()->where('approved', 1)->latest()  //NOT WORKING!

}

من اونطور که چک کردم متد ()comments فراخوانی میشه ولی ازونجا به بعد مثلا commentable تاثیری در ماجرا نداره حتی وقتی کامل متد commentable رو حذف میکنم اتفاقی در نتیجه نمیفته.

آفلاین
user-avatar
حسام موسوی
11 ماه پیش

قطعا مطمئن هستم قسمتی از کدهاتون رو اشتباه نوشتید حالا کجاشو دقیقا نمیتونم بگم چون نمیتونم کداتون رو ببینیم
اما مثالن اینجا با dd تست بگیرید اصلا $post چیزی رو بر میگردونه
اگر بر میکردونه برید سر وقت متد comments در post و ببینید آیا return شده ؟ آیا رابطه درست هست ؟ آیا جدول درست هست

آفلاین
user-avatar
Mohammad
12 ماه پیش

سلام وقت بخیر
شما چه ابزاری رو برای پشتیبانی از markdown پیشنهاد میکنید ؟
( درسته جوابش رو میتونم سرچ کنم ولی تجربه شما بیشتره و میتونید یه ابزار مناسب رو پیشنهاد کنید )

آفلاین
user-avatar
حسام موسوی
12 ماه پیش

در php بنظرم parsdwon مناسبه

آفلاین
user-avatar
امین
12 ماه پیش

درود حسام

اگر بخواهیم نظرات رو فقط کسانی که پول دوره رو پرداخت کردن نظر بذارن چیکار باید انجام بدیم؟!

آفلاین
user-avatar
حسام موسوی
12 ماه پیش

سلام کاری نداره فقط چک میکنید طرف دوره رو تهیه کردیه یا نه با روابطی که وجود داره

آفلاین
user-avatar
Asghar Jalilzadeh
12 ماه پیش

سلام
من طبق آموزش ها این ویدئو جلو رفتن و همه چی درست هست ولی یک مشکل تو بخش ویو دارم
وقتی میخوام به نطری پاسخ بدم فرم modal نمایش داده نمیشه ورژن بوت استرپمم 4.3.1 هست

آفلاین
user-avatar
حسام موسوی
12 ماه پیش

سلام اگر از ورژن ۴ استفاده میکنید فراخونی modal متفاوته نسبت به چیزی که در این دوره پیاده کردیم میتونید از مستندات بوتت استرپ ۴ ببینید چطوری مدل رو لود باید کنید

آفلاین
user-avatar
مصطفی پور
1 سال پیش

باعرض سلام و خسته نباشید خدمت مهندس موسوی عزیز

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

آفلاین
user-avatar
حسام موسوی
1 سال پیش

سلام با همین داستان Polymorphic Relations یک جدول لایک درست میکنید و مابقی رو با کدها پیاده سازی میکنید . خیلی ساده هست شروع که کنید حل میشه

آفلاین
user-avatar
مصطفی پور
1 سال پیش

باعرض سلام مجدد

برای ذخیره سازی این مورد که هرخشی فقط یبار برای یک کامنت لایک ثبت کنه آیا نیاز هست در جدول یه فیلد اختصاص داشته باشه به یوزر آیدی یا آی پی شخص؟ ایا با این روش تعداد رکوردها در اون جدول خیلی زیاد نمیشن؟ مخصوصا برای سایتهای خبری؟ راه دیگه ای هم هست؟

آفلاین
user-avatar
حسام موسوی
1 سال پیش

بله باید یوزر آیدی داشته باشه