From 4e7d011fbb0ae8607be8304d0b8fe0f6bc02a5c7 Mon Sep 17 00:00:00 2001 From: merdiano Date: Wed, 10 Jul 2019 18:47:00 +0500 Subject: [PATCH] category material many to many --- .../Controllers/Admin/AdminController.php | 31 ++++++++++++------- .../Admin/MaterialCrudController.php | 22 +++++++++++-- app/Http/Controllers/HomeController.php | 13 ++++++-- app/Http/Controllers/OrderController.php | 1 + app/Http/Requests/MaterialRequest.php | 6 +++- app/Models/Category.php | 2 +- app/Models/Material.php | 4 +-- .../2019_06_25_145511_add_to_orders_table.php | 2 +- ...019_06_26_054831_alter_materials_table.php | 2 ++ ...19_07_09_122943_add_to_materials_table.php | 2 +- resources/lang/tk/admin.php | 1 + resources/views/search.blade.php | 2 +- .../views/vendor/backpack/dashboard.blade.php | 4 +-- 13 files changed, 65 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index acd31754..dc778473 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -11,6 +11,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Category; +use App\Models\CategoryMaterial; use App\Models\Material; use App\Models\Order; use App\User; @@ -56,18 +57,24 @@ class AdminController extends Controller $this->data['field']['start_name'] = 'start'; $this->data['field']['end_name'] = 'end'; $this->data['field']['label'] = 'range'; - $this->data['categories'] = Category::where('depth',1) - ->select('categories.*', - DB::raw("(Select COUNT(orders.id) From orders - Where orders.category_id = categories.id and orders.payed = 1{$filter_by_date}) as orders"), - DB::raw("(Select SUM(orders.price) From orders - Where orders.category_id = categories.id and orders.payed = 1{$filter_by_date}) as total"), - DB::raw('SUM(materials.view) as views'), - DB::raw('SUM(materials.like) as likes')) - ->leftJoin('materials','categories.id','=','materials.category_id') - ->groupBy('categories.id') - ->get(); +// $this->data['categories'] = Category::where('depth',1) +// ->select('categories.*', +// //DB::raw("(Select COUNT(orders.id) From orders +// //Where orders.category_id = categories.id and orders.payed = 1{$filter_by_date}) as orders"), +// //DB::raw("(Select SUM(orders.price) From orders +// //Where orders.category_id = categories.id and orders.payed = 1{$filter_by_date}) as total"), +// DB::raw('SUM(materials.view) as views'), +// DB::raw('SUM(materials.like) as likes')) +//// ->leftJoin('materials','categories.id','=','materials.category_id') +// ->groupBy('categories.id') +// ->get(); + $this->data['categories'] = CategoryMaterial::with(['category:name,id']) + ->selectRaw('category_id, SUM(orders_count) as orders, SUM(orders_payed_count) as total, SUM(views) as views, SUM(likes) as likes') + ->groupBy('category_id') + ->distinct('category_id') + ->get(); + //dd($this->data['categories']); return view('backpack::dashboard', $this->data); } @@ -79,7 +86,7 @@ class AdminController extends Controller $filter_by_date = " and (orders.created_at BETWEEN {$start_date} and {$end_date})"; $category = Category::findOrfail($cat_id); - $materials= Material::where('category_id',$cat_id) + $materials= $category->materials() ->select('materials.title','materials.view','materials.like', DB::raw("(Select COUNT(orders.id) From orders Where orders.material_id = materials.id and orders.payed = 1{$filter_by_date}) as orders"), diff --git a/app/Http/Controllers/Admin/MaterialCrudController.php b/app/Http/Controllers/Admin/MaterialCrudController.php index cef0c2d7..1ff2c504 100644 --- a/app/Http/Controllers/Admin/MaterialCrudController.php +++ b/app/Http/Controllers/Admin/MaterialCrudController.php @@ -6,7 +6,7 @@ use Backpack\CRUD\app\Http\Controllers\CrudController; // VALIDATION: change the requests to match your own file names if you need form validation use App\Http\Requests\MaterialRequest as StoreRequest; -use App\Http\Requests\MaterialRequest as UpdateRequest; + use App\Http\Requests\MaterialRequest as UpdateRequest; use Backpack\CRUD\CrudPanel; /** @@ -38,6 +38,15 @@ class MaterialCrudController extends CrudController $this->crud->addColumns([ ['name' => 'title','type' => 'text', 'lable' => trans('admin.title')], + [ + // n-n relationship (with pivot table) + 'label' => "Categories", // Table column heading + 'type' => "select_multiple", + 'name' => 'categories', // the method that defines the relationship in your Model + 'entity' => 'categories', // the method that defines the relationship in your Model + 'attribute' => "name", // foreign key attribute that is shown to user + 'model' => "App\Models\Category", // foreign key model + ], ['name' => 'view','type' => 'text', 'lable' => trans('admin.view')], ['name' => 'rating','type' => 'text', 'lable' => trans('admin.like')], ['name' => 'price','type' => 'text', 'lable' => trans('admin.price')], @@ -49,8 +58,15 @@ class MaterialCrudController extends CrudController $this->crud->addFields([ ['name' => 'title','type' => 'text', 'lable' => trans('admin.title'),'tab' => trans('admin.material.firsttab')], - ['name' => 'category_id', 'type' => 'select', 'entity' => 'category', 'attribute' =>'name', 'model' => 'App\Models\Category', - 'lable'=>trans('admin.category'), 'tab' => trans('admin.material.firsttab')], + [ + 'name' => 'categories', + 'type' => 'select2_multiple', + 'entity' => 'categories', + 'attribute' =>'name', + 'model' => 'App\Models\Category', + 'pivot' => true, + 'lable'=>trans('admin.category'), 'tab' => trans('admin.material.firsttab') + ], ['name' => 'desc','type' => 'textarea', 'lable' => trans('admin.desc'),'tab' => trans('admin.material.firsttab')], ['suffix' => 'man.','attributes' => ["step" => "any"],'name' => 'price','type' => 'number', 'lable' => trans('admin.price'),'tab' => trans('admin.material.secondtab')], diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 1e75ade8..bf71caab 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Http\Requests\ProfileRequest; use App\Models\Category; +use App\Models\CategoryMaterial; use App\Models\Material; use App\Models\Order; use Carbon\Carbon; @@ -46,7 +47,7 @@ class HomeController extends Controller //todo restrict sort to be only {'all','rate','date'} if($cat_id != 0){ $cat = Category:: findOrFail($cat_id); - $materials = Material::where('category_id',$cat_id); + $materials = $cat->materials(); } else{ @@ -107,6 +108,8 @@ class HomeController extends Controller $material->view ++; $material->save(); + CategoryMaterial::where('material_id',$material_id) + ->update(['views'=> DB::raw('views + 1')]); // dd($material->details); if(!$watch_list_cookie){ $watch_list = [1 => $material_id]; @@ -147,8 +150,8 @@ class HomeController extends Controller return view('material',compact('material')) ->with('liked',$liked) - ->with('order',$order) - ->with('cat',$material->category); + ->with('order',$order); +// ->with('cat',$material->category); } public function like($material_id){ @@ -161,6 +164,8 @@ class HomeController extends Controller Cookie::queue('likelist', json_encode($like_list), 450000); $material->like ++; $material->save(); + CategoryMaterial::where('material_id',$material_id) + ->update(['likes'=> DB::raw('likes + 1')]); } else{ $like_list = json_decode($like_list_cookie,true); @@ -169,6 +174,8 @@ class HomeController extends Controller $like_list[]=$material_id; $material->like ++; $material->save(); + CategoryMaterial::where('material_id',$material_id) + ->update(['likes'=> DB::raw('likes + 1')]); Cookie::queue('likelist', json_encode($like_list), 450000); } } diff --git a/app/Http/Controllers/OrderController.php b/app/Http/Controllers/OrderController.php index db6f2f1f..bbb70818 100644 --- a/app/Http/Controllers/OrderController.php +++ b/app/Http/Controllers/OrderController.php @@ -34,6 +34,7 @@ class OrderController extends Controller $order->oid = str_replace('-','',Str::orderedUuid()); $order->save(); + //todo update order_count on category_material return $this->register($order); } diff --git a/app/Http/Requests/MaterialRequest.php b/app/Http/Requests/MaterialRequest.php index b9ad7f68..30cfda1e 100644 --- a/app/Http/Requests/MaterialRequest.php +++ b/app/Http/Requests/MaterialRequest.php @@ -27,7 +27,11 @@ class MaterialRequest extends FormRequest { return [ 'title' => 'required|min:5|max:255', - 'category_id' => 'required|integer' + 'desc' => 'required', + 'price' => 'required|numeric', + 'size' => 'required|numeric', + 'duration' => 'required|numeric', +// 'category_id' => 'required|integer' ]; } diff --git a/app/Models/Category.php b/app/Models/Category.php index 863cd7c7..361c551e 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -36,7 +36,7 @@ class Category extends Model */ public function materials(){ - return $this->hasMany(Material::class); + return $this->belongsToMany(Material::class,'category_material'); } /* |-------------------------------------------------------------------------- diff --git a/app/Models/Material.php b/app/Models/Material.php index 435d2dc4..9fbe767c 100644 --- a/app/Models/Material.php +++ b/app/Models/Material.php @@ -47,8 +47,8 @@ class Material extends Model |-------------------------------------------------------------------------- */ - public function category(){ - return $this->belongsTo(Category::class); + public function categories(){ + return $this->belongsToMany(Category::class,'category_material'); } public function orders(){ return $this->belongsTo(Order::class); diff --git a/database/migrations/2019_06_25_145511_add_to_orders_table.php b/database/migrations/2019_06_25_145511_add_to_orders_table.php index 52a03a9d..73b669fe 100644 --- a/database/migrations/2019_06_25_145511_add_to_orders_table.php +++ b/database/migrations/2019_06_25_145511_add_to_orders_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class AddToOrdersTable extends Migration +class AddToOrdersTable2 extends Migration { /** * Run the migrations. diff --git a/database/migrations/2019_06_26_054831_alter_materials_table.php b/database/migrations/2019_06_26_054831_alter_materials_table.php index 1239d8a5..b412209b 100644 --- a/database/migrations/2019_06_26_054831_alter_materials_table.php +++ b/database/migrations/2019_06_26_054831_alter_materials_table.php @@ -15,6 +15,8 @@ class AlterMaterialsTable extends Migration { Schema::table('materials', function (Blueprint $table) { $table->dropColumn('duration'); + $table->dropForeign(['category_id']); + $table->dropColumn('category_id'); // $table->unsignedDecimal('duration')->nullable(); // }); diff --git a/database/migrations/2019_07_09_122943_add_to_materials_table.php b/database/migrations/2019_07_09_122943_add_to_materials_table.php index 1bca4101..3c0d2abe 100644 --- a/database/migrations/2019_07_09_122943_add_to_materials_table.php +++ b/database/migrations/2019_07_09_122943_add_to_materials_table.php @@ -26,7 +26,7 @@ class AddToMaterialsTable extends Migration public function down() { Schema::table('materials', function (Blueprint $table) { - // + $table->dropSoftDeletes(); }); } } diff --git a/resources/lang/tk/admin.php b/resources/lang/tk/admin.php index 2b34171e..fa4565f4 100644 --- a/resources/lang/tk/admin.php +++ b/resources/lang/tk/admin.php @@ -15,6 +15,7 @@ return[ 'material.thirdtab' => 'Üçünji', 'material.fourthtab' => 'Dördünji', 'material.extras' => 'Goşmaça', + 'material.image' => 'Cover Image', 'download_count' => 'Download limidy', 'day_count' => 'Download gün limidy', 'duration' => 'Dowam wagty', diff --git a/resources/views/search.blade.php b/resources/views/search.blade.php index 3130b83c..413145c0 100644 --- a/resources/views/search.blade.php +++ b/resources/views/search.blade.php @@ -8,7 +8,7 @@
-

@lang('content.searh_result',['key' => $key])

+

@lang('content.search_result',['key' => $key])

  • diff --git a/resources/views/vendor/backpack/dashboard.blade.php b/resources/views/vendor/backpack/dashboard.blade.php index c3059a51..8897c6ea 100644 --- a/resources/views/vendor/backpack/dashboard.blade.php +++ b/resources/views/vendor/backpack/dashboard.blade.php @@ -68,12 +68,12 @@ @foreach($categories as $category) - {{$category->name}} + {{$category->category->name}} {{$category->orders}} {{$category->total}} {{$category->views}} {{$category->likes}} - details + details @endforeach