From 5d84642d5d275189c65d2f394ddae3dc67b04b18 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 4 Aug 2018 11:17:15 +0800 Subject: [PATCH] Add project comments relation Add Comment model Add commets table and factory Add Project model morph map --- app/Entities/Projects/Comment.php | 16 ++++++++++ app/Entities/Projects/Project.php | 6 ++++ app/Providers/AppServiceProvider.php | 6 ++++ database/factories/CommentFactory.php | 20 +++++++++++++ .../2018_08_04_110400_create_comments_table.php | 35 ++++++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 app/Entities/Projects/Comment.php create mode 100644 database/factories/CommentFactory.php create mode 100644 database/migrations/2018_08_04_110400_create_comments_table.php diff --git a/app/Entities/Projects/Comment.php b/app/Entities/Projects/Comment.php new file mode 100644 index 0000000..0ef6df2 --- /dev/null +++ b/app/Entities/Projects/Comment.php @@ -0,0 +1,16 @@ +belongsTo(User::class); + } +} diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 2b5fba7..2dfc7b5 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -4,6 +4,7 @@ namespace App\Entities\Projects; use App\Entities\Invoices\Invoice; use App\Entities\Payments\Payment; +use App\Entities\Projects\Comment; use App\Entities\Partners\Customer; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; @@ -67,6 +68,11 @@ class Project extends Model return $this->hasMany(Payment::class)->orderBy('date', 'desc'); } + public function comments() + { + return $this->morphMany(Comment::class, 'commentable'); + } + public function customer() { return $this->belongsTo(Customer::class); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f15b41c..79a0202 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Database\Eloquent\Relations\Relation; class AppServiceProvider extends ServiceProvider { @@ -14,9 +15,14 @@ class AppServiceProvider extends ServiceProvider public function boot() { require_once app_path().'/helpers.php'; + \Validator::extend('file_extension', function ($attribute, $value, $parameters, $validator) { return in_array($value->getClientOriginalExtension(), $parameters); }); + + Relation::morphMap([ + 'projects' => 'App\Entities\Projects\Project', + ]); } /** diff --git a/database/factories/CommentFactory.php b/database/factories/CommentFactory.php new file mode 100644 index 0000000..c781635 --- /dev/null +++ b/database/factories/CommentFactory.php @@ -0,0 +1,20 @@ +define(Comment::class, function (Faker $faker) { + + return [ + 'commentable_type' => 'projects', + 'commentable_id' => function () { + return factory(Project::class)->create()->id; + }, + 'body' => $faker->sentence, + 'creator_id' => function () { + return factory(User::class)->create()->id; + }, + ]; +}); diff --git a/database/migrations/2018_08_04_110400_create_comments_table.php b/database/migrations/2018_08_04_110400_create_comments_table.php new file mode 100644 index 0000000..44a9c6e --- /dev/null +++ b/database/migrations/2018_08_04_110400_create_comments_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('commentable_type'); + $table->unsignedInteger('commentable_id'); + $table->string('body'); + $table->unsignedInteger('creator_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('comments'); + } +}