هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست
-
تعداد ارسال ها
341 -
تاریخ عضویت
-
آخرین بازدید
-
Days Won
77
پست ارسال شده توسط saber
-
-
برای این کار میتونید فایل های .vue رو در پوشه ی resources/js/components قرار بدید و بعد در فایل app.js اونها رو import کنید. به عنوان مثال:
در فایل resources/js/app.js:
require('./bootstrap'); Vue.component('example-component', require('./components/ExampleComponent.vue').default); const app = new Vue({ el: '#app', });
بعد در فایل blade خودتان، می توانید از component ها استفاده کنید:
<div id="app"> <example-component></example-component> </div>
بعدش باید webpack.mix.js رو طوری تنظیم کنید که فقط app.js رو کامپایل کنه
mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');
-
-
در در ۱۴۰۱/۱۱/۲۸ در 11:50، Paradox گفته است :function manage_region_status(status) { $.ajax({ type:'POST', url:'/admin.send.locations', data: { status // _token: '{{csrf_token()}}' "_token": "{{ csrf_token() }}", }, }); }
اینجا مشکل دارم
اینقسمت باید id شهری رو که انتخاب شده از طریق جیکوئری دریافت کنید و با نام city به کنترلر ارسال کنید چون توی کنترلر دیدم با نام city دریافت میکنید به شکل زیر
function manage_region_status(status) { let city = $('#city_input_id_add_here').val(); $.ajax({ type:'POST', url:"{{ route('your route name') }}" data: { "_token": "{{ csrf_token() }}", status: status, city: city }, }); }
توی کنترلر یه فیلد با مقدار all هم دیدم دریافت میکنید اون رو هم باید مقدارش رو از فرم بگیرید و توی ایجکس ارسال کنید
- 1
-
در در ۱۴۰۱/۱۱/۲۸ در 12:48، Paradox گفته است :جدول به این شکل میشه ؟
Schema::create('discounts', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->string('code'); $table->integer('percent'); $table->boolean('status')->default(0); $table->timestamps(); });
حالا من برای مثلا جدول محصول بخوام باید این جدول رو هم داشته باشم ؟ یا مثل یوزر فقط یه فیلد product_id بزارم ؟
Schema::create('discount_product', function (Blueprint $table) { $table->foreignId('product_id')->constrained()->onDelete('cascade'); $table->foreignId('discount_id')->constrained()->onDelete('cascade'); $table->primary(['discount_id' , 'product_id']); });
اون جدولی که بهتون گفتم براساس اون سناریوی اولی بود که گفته بودید. الان میخواید بطور جداگانه برای هر محصولی تخفیف ایجاد کنید؟
یا میخواید کدهای تخفیف استفاده شده رو برای هر محصولی مشخص کنید؟
-
در در ۱۴۰۱/۱۱/۲۸ در 12:26، Paradox گفته است :اره اول به این شکل گفتن الان ولی تغییر کرد !! بابت هر کاربری که از کد تخفیف استفاده میکنه درصدها متفاوت باشه ...
اگه 5 نفر استفاده کردن 50 درصد تخفیف اگه 10 نفر 100 درصد
یا به این شکل
یک بار استفاده شد بگه 20 درصد دوبار 40 و 5 بار استفاده کردم 100 درصد ...
پس باید این شرایط باید جدول جدا درست کرد
و اینکه درصدها رو بشه تغییر دادم باید کوئری زد فقط درسته ؟
باید یه بخش تنظیمات داشته باشید و از طریق اون همیشه طبق نیازی که دارید تخفیف رو تعیین کنید مثلا در تنظیمات مشخص کنید تعداد معرف: x و میزان تخفیف y
بعد براساس تعداد معرفیهای کاربر و تنظیماتی که انجام دادید میتونید میزان تخفیف رو محاسبه کنید.
-
در در ۱۴۰۱/۱۱/۲۵ در 13:37، Paradox گفته است :یه سوال ایا نیازه جدول جدا برای فیلتر ایجاد بشه ؟
من میخام فیلترهایی که برای کاربران قابل نمایش هست از پنل ادمین بشه مدیریتش کنه ( مثلا بتونم سن رو غیرفعال کنم تا فیلتر بر اساس موارد دیگه باشه و سن رو نشون نده موقع فیلتر کردن)
برای این موضوع میتونید یه بخش تنظیمات توی پنل ادمین داشته باشید و بخشهایی رو که میخواید قابل فیلتر باشن از اونجا مشخص کنید و هر زمانی خواستید یه بخشی رو فعال یا غیرفعال کنید
- 1
-
توی پست اول گفتید هر کاربر که از کد معرف استفاده کنه مثلا 30 درصد تخفیف به کاربر معرف تعلق بگیره اگر اینطوری باشه و میخواید برای هر ثبت نام معرفی شده
یه کد تخفیف جنریت کنید میتونید یه جدول برای تخفیفها بسازید و وقتی کاربری با کد یه کاربر ثبت نام کرد تخفیف رو براش توی جدول تخفیفها ثبت کنید
این جدول هم میتونه ستونهای زیر رو داشته باشه:
discount_id
discount_user_id شناسه کاربری که تخفیف بهش تعلق گرفته
discount_code کد تخفیف ایجاد شده
discount_percent درصد تخفیف
discount_status وضعیت تخفیف که 0 یا 1 بگیره که پیشفرض 0 باشه و زمانی که از کد تخفیف استفاده شد به 1 تغییر بدید که مشخص باشه کدوم تخفیفها استفاده شده
created_at
updated_at
کلا تخفیف حالتهای مختلفی میتونه داشته باشه ولی با این روش به نظرم چیزی رو که میخواید میتونید پیاده سازی کنید.
-
چون همه مناطق شما در یه وضعیت هستن و فعال یا غیرفعال هستن توی کنترلر که در متد fetchRegion مناطق رو دریافت میکنید status رو اونجا چک کنید و توی response که برگشت میدید یه فیلد با اسم status قرار بدید و مقدارش رو برابر با وضعیت مناطق دریافتی قرار بدید بعدشم که در بخش جیکوئری با پاسخی که ایجکس دریافت کرده دکمه ها رو مدیریت کنید. مشابه کد زیر میتونید status رو پاس بدید
public function fetchRegion(Request $request) { $data['regions'] = Region::where("city_id", $request->city_id)->get(); $data['status'] = $data['regions'][0]->status; // دقیقا مطابق با فیلدی که در دیتابیس هست مقدار رو دریافت کنید return response()->json($data); }
- 1
-
دیتابیستون رو چک کنید ببینید اطلاعات چطوری ذخیره شدن احتمال داره اطلاعات درست توی دیتابیستون ذخیره نشده
-
بین شهر و منطقه رابطه چند به چند دارید؟ و بین منطقه و کاربران رابطه یک به چند؟
-
باید از where استفاده کنید و count رو بگیرید
$count = User::where('reagent_code', $user->invite_code)->count();
- 1
-
برای اینکه status رو توی response ندارید من اون رو برای تست نوشتم و شما باید مقدارش رو از وضعیت مناطق بگیرید و در response همون مقدار رو دریافت و براساس اون دکمه ها رو مخفی یا نمایش بدید
-
با همون ستونها میتونید کار کنید یکی برای معرفی افراد جدید هست دومی هم که برای این هست که مشخص بشه کاربر توسط چه کسی معرفی شده و طبق همون ستون reagent_code باید تعداد افرادی رو که معرفی کرده پیدا کنید
- 1
-
شرطهایی رو که توی جستجو گذاشتید از طریق فرم ارسال نمیکنید؟ توی کنترلر مرحله به مرحله بعد از هر شرط یه dd بگیرید ببینید اشکال کارتون کجا هست اگه شرطها برقرار باشن و روابط رو درست پیاده سازی کنید خروجی میده
-
باید روابط بین جداول رو اول ایجاد کنید بعد توی کوئریها ازشون استفاده کنید کلا روشهای مختلفی میشه به نتایج رسید ولی با روابط اول باید بین شهر و منطقه و کاربران روابطی رو که دارن ایجاد کنید مثلا به شکل زیر
// User model public function region() : BelongsTo { return $this->belongsTo(Region::class); } =========================== // City model public function regions() : HasMany { return $this->hasMany(Region::class); } ============================ // Region model public function users() : HasMany { return $this->hasMany(User::class); } public function city() : BelongsTo { return $this->belongsTo(City::class); } ======================== // توی کنترلر به شکل زیر $users = User::where('status', true); if ($request->has('age_difference')) { $users->where('age_difference', '=', $request->age_difference); } if ($request->has('time')) { $users->where('time', '=' , $request->time); } if ($request->has('disability')) { $users->where('disability', '=' , $request->disability); } if ($request->has('name')) { $users->where(function ($query) use ($request) { $query->whereHas('region', function ($query) use ($request) { $query->whereHas('city', function ($query) use ($request) { $query->where('name', 'like', $request->name); }); }); }); }); } dd($users->get());
- 1
-
بخش نمایش دکمه ها مربوط به جیکوئری هست و ارتباطی با لاراول نداره ولی باید توی قسمتی که response مناطق رو دریافت میکنید status رو هم دریافت کنید و براساس او از متدهای show و hide توی جیکوئری میتونید استفاده کنید مثلا دو تا دکمه دارید که پیشفرض مخفی هستن و نمایش داده نمیشن وقتی response مناطق رو دریافت کردید اگه از قبل فعال بودن دکمه غیرفعال رو نمایش میدید یه چیزی شبیه کد زیر:
<button type="submit" style="display: none" id="enable_region" onclick="manage_region_status(1)">فعال</button> <button type="submit" style="display: none" id="disable_region" onclick="manage_region_status(0)">غیرفعال</button> <script> $('#city-dropdown').on('change', function () { var idCity = this.value; $("#region-dropdown").html(''); $.ajax({ url: "{{url('admin/locations/fetch-regions')}}", type: "POST", data: { city_id: idCity, _token: '{{csrf_token()}}' }, dataType: 'json', success: function (res) { $('#region-dropdown').html('<option value="all">تمام مناطق</option>'); // اینجا وضعیت رو چک میکنید و براساس اون دکمه مورد نظر رو نمایش میدید if(res.status) { $('#enable_region').hide(); $('#disable_region').show(); }else{ $('#enable_region').show(); $('#disable_region').hide(); } } }) }) function manage_region_status(status) { // فرم رو اینجا ارسال میکنید } </script>
در مورد کنترلر هم متوجه کارتون نشدم توی متد submitLocation در شرط اول مناطق رو غیرفعال کردید و در صورتی که شرط برقرار نیست با جدول کاربران sync کردید که این دو تا کار باهم همخوانی ندارن
- 1
-
الان مشکلتون این هست که چطوری دکمه های فعال یا غیرفعال رو نمایش بدید؟ چون میخواید بطور کلی مناطق رو فعال یا غیرفعال کنید و مثلا انتخاب یک یا چند منطقه ندارید کار راحتتری هست میتونید موقعی که لیست مناطق رو دریافت میکنید فیلد status رو هم بگیرید و براساس اون توی response بخش ایجکس هر کدوم از دکمه های فعال یا غیرفعال رو نمایش بدید و موقعی که روی دکمه مورد نظر کلیک شد عمل فعال یا غیرفعاسازی رو انجام بدید.
-
منظورتون این هست که خود جدول شهرها با کاربران از طریق جدول مناطق ارتباط داره؟ و جدول شهر مستقیم ارتباطی به user نداره درسته؟
- 1
-
نیازی نیست فیلد جدید اضافه کنید اون رو حذفش کنید. برای اینکه چک کنید کاربر توی لیست مورد علاقه هست یا خیر اول باید لیست کاربران مورد علاقه یه نفر رو دریافت کنید
بعد توی حلقه foreach که در blade کاربران رو نمایش میدید باید چک کنید شناسه کاربر جاری در لیست کاربران مورد علاقه هست یا خیر که یه کد مشابه زیر میتونید بنویسید
// با این کد لیست شناسه کاربر مورد علاقه کاربری رو که لاگین کرده دریافت کنید و به بلید بفرستید $favorites = Favorite::where('user_id',auth()->user()->id)->pluck('favorite_user_id')->toArray(); // با کد زیر هم در حلقه ای که کاربران رو نمایش میدید چک کنید ببینید مورد علاقه هست یا خیر @foreach($users as $user) @if(in_array($user->id,$favorites)) // مورد علاقه هست @else // مورد علاقه نیست @endif @endforeach
- 1
-
توی blade که آبجکت user رو دارید و شناسه کاربر رو توی route پاس میدید این آبجکت رو از کدوم کاربر ساختید؟ این آبجکت باید برای پروفایل کاربری باشه که دارید مشاهده میکنید
مورد بعدی هم توی متدهای کنترلر که کد زیر رو نوشتید
$favorite_user_id = Favorite::find($favorite);
ورودی خود متد که $favorite هست شناسه همون کاربری هست که میخواید اضافه یا حذف کنید بدون نوشتن کد بالا میتونید مستقیم شناسه دریافتی رو به متد create یا delete پاس بدید ولی چون از متد get برای ساخت route استفاده کردید بهتر هست قبلش چک کنید چنین کاربری توی سایت موجود هست یا خیر اگر کاربر موجود بود ادامه کار رو انجام بدید در غیراینصورت یه پیغام خطا برگردونید که یه چیزی شبیه کد زیر میتونید بنویسید:
$user = User::find($favorite); if(!$user) { // بازگشت با پیغام خطا } // اضافه شدن به لیست علاقه مندی Favorite::create([ 'user_id' => auth()->user()->id, 'favorite_user_id' => $favorite, 'added_date' => Carbon::now() ]); // حذف از لیست // اینجا قبل از حذف هم میتونید چک کنید که آیا چنین کاربری در لیست علاقه مندی از قبل هست یا خیر Favorite::where('user_id',auth()->user()->id) ->where('favorite_user_id',$favorite) ->delete();
- 1
-
شما کدتون رو چطوری نوشتید؟ کدهایی که توی view نوشتید و route هایی که ساختید به همراه کدهایی که توی کنترلر نوشتید قرار بدید ببینیم مشکلتون کجا هست
-
در 12 ساعت قبل، Paradox گفته است :ممنون مهندس بله من میخام فقط برای کاربران باشه
این چیزی که قرار دادید رو گذاشتم یه ارور دارم
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'favorite_user_id' cannot be null
شما از api استفاده کردید به این شکل نوشتید ؟من باید به یه شکل دیگه بنویسم تا این ارور نده ؟
خطا بخاطر این هست که favorite_user_id مقداری نفرستادید باید شناسه کاربری رو که میخواید توی لیست دلخواه قرار بگیره براش بفرستید. من با api اون مقدار رو با نام user_id براش ارسال کردم
-
من یه توضیح کلی براتون مینویسم بررسی کنید و از روی اون پیاده سازی کنید. اگه فقط برای model کاربران میخواید اینکار انجام بشه ساده ترین روش این هست که یه جدول مثلا به اسم favorites بسازید با مایگریشن زیر
Schema::create('favorites', function (Blueprint $table) { $table->bigIncrements('id'); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->foreignId('favorite_user_id')->constrained('users','id')->onDelete('cascade'); $table->timestamp('added_date')->default(DB::raw('CURRENT_TIMESTAMP')); });
بعد برای اضافه کردن به لیست و حذف یه کاربر از لیست میتونید متدهای زیر رو بنویسید من اینها رو با api نوشته بودم شما میتونید بدون api هم بنویسید
// add user to favorite list public function add(Request $request) { $favorite_user_id = $request->get('user_id'); // شناسه کاربری هست که کاربر لاگین شده در سایت آنرا در لیست مورد دلخواه قرار میدهد $favorite = Favorite::create([ 'user_id' => auth()->user()->id, 'favorite_user_id' => $favorite_user_id, 'added_date' => Carbon::now() ]); // return your response } // delete user from favorite list public function remove(Request $request) { $favorite_user_id = $request->get('user_id'); // شناسه کاربری که میخواهیم از لیست خود حذف کنیم Favorite::where('user_id',auth()->user()->id) ->where('favorite_user_id',$favorite_user_id) ->delete(); // return your response }
ولی اگر بخواید به غیر از کاربران موارد دیگه ای رو هم به لیست دلخواه اضافه کنید اینطوری بهتر هست از روشهای دیگه ای مثل پیاده سازی با روابط polymorphic استفاده کنید.
- 1
-
احتمالا متدی که براش درخواست ارسال میکنید از formRequest استفاده کردید و متد authorize مقدار true برنمیگردونه
باید formrequest مربوطه رو بررسی کنید
وب ساز
در رفع مشکلات و سوالات عمومی لاراول Laravel
ارسال شده در · Report reply
برای رفع این خطا توی ترمینال باید دستور زیر رو اجرا کنید
php artisan key:generate