رفتن به مطلب
انجمن پشتیبانی لاراول ایران

Paradox

کاربر
  • تعداد ارسال ها

    112
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    1

تمامی ارسال های Paradox

  1. سلام وقت بخیر من میخام هر کاربر موقع ثبت نام یک کد دعوت اختصاصی داشته باشه که اگه هر شخصی از کد دعوت استفاده کرد مثلا 30 درصد تخفیف موقع خرید بهش اضافه بشه و همینطور تو پروفایلش تعداد افرادی که کد دعوت استفاده کردن و تخفیفی که تعلق گرفت رو بشه نمایش داد تو جدول users یه فیلد اضافه کردم به این اسم $table->unsignedInteger('invite_code')->unique(); و به این شکل نوشتم $user = User::create([ 'phone' => $data['phone'], 'password' => Hash::make($data['password']), 'reagent_code' => ['nullable' , 'max:255' , 'min:3'], 'invite_code' => mt_rand(100000, 999999), ]); کد ایجاد شد ایا این کار اشتباهه ؟ آیا نیازه یه جدول دیگه ایجاد کرد ؟ من یه فیلد هم دارم به این اسم $table->string('reagent_code')->nullable(); که کاربر موقع ثبت نام کد دعوت مورد نظر رو اینجا وارد کنه بر اساس این فیلد باید تعداد دفعات رو نمایش بدم ؟و درصد رو اعمال کنم؟
  2. اینجا کل کاربران رو نمایش میده و دیگه فیلتری انجام نمیشه ولی وقتی dd میگیرم اطلاعات کاربری که فیلتر کردم رو نشون میده چرا
  3. الان به این شکل که نوشتم برای نمایش دکمه ها if(res.status) { $('#enable_region').hide(); $('#disable_region').show(); }else{ $('#enable_region').show(); $('#disable_region').hide(); } چه مناطق فعال باشه چه غیرفعال دکمه فعال رو نمایش میده بعد از انتخاب منطقه این متد برای نمایش منطقه مشکلی نداره ؟ public function fetchRegion(Request $request) { $data['regions'] = Region::where("city_id", $request->city_id)->get(); return response()->json($data); }
  4. پس الان فعال یا غیرفعال بودن status رو دیگه نباید با لاراول ارسال کنم درسته ؟ با جیکوئری انجام بدم ؟ یعنی اون متد submitLocation رو نیازی بهش نیست ؟ توسط این متد manage_region_status باید status رو با جیکوئری صفر یا یک کنم ؟ من قبلا به این شکل انجام میدادم تو لاراول if ($region->status == 1) { $region->status = 0; } else { $region->status = 1; } $region->save(); تو جیکوئری نمیدونم به چه شکل میشه اینکارو کرد
  5. به این شکل که نوشتم وقتی dd میگیرم کل مشخصات کاربری که فیلتر کردم میاره ولی در حالت عادی هیچ کاربری رو نمایش نمیده $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('cities', function ($query) use ($request) { $query->where('name', 'like', $request->name); }); }); } // dd($users->get());
  6. بله تو ایجکس مشکلم اینه چطوری دکمه فعال و غیرفعال status رو نمایش بدم و روش کلیک شد قابلیت فعال و غیرفعال اعمال بشه الان تو کنترلر هم باید تغییری اعمال بشه پس ؟ این چیزی که نوشتم اشتباهه؟
  7. بله دقیقا منظورم همینه
  8. تو همین بخش جستجو ساده بر اسا اسم کاربر انجام میدم تا قبل اضافه کردن کدهای بالا کار میکرد ولی الان برای جستو ساده ارور زیر رو دارم Call to undefined method App\Models\User::cities() چطوری توی روابط چند به چند میتونم این مشکل رو حل کنم ؟ وقتی کدهای مربوط به فیلتر رو کامنت میکنم درسته و مشکلی نداره این بخش
  9. سلام وقت بخیر من میخام جستجو بر اساس فیلتر ایجاد کنم برای دو جدول کابران و جدول شهر ( که اینجا از روش چند به چند استفاده کردم و تو جدول منطقه user_id قرار داره اینجا مشکلی برای جستجو وجود نداره؟) برای جدول کاربران فیلدهایی که میخام فیلتر بشه از enum استفاده کردم (3 تا مقدار اول enum هستن ) اینجا به چه شکل باید تعریف کنم؟ تو این حالت فقط تو url نمایش میده و کاربر رو پیدا نمیکنه $user_query = User::query(); $city_query = City::query(); if($keyword = $request->get('search')){ $user_query->where('age_difference' , '=' , "{$keyword}")->where('time' , '=' , "{$keyword}")->where('disability' , '=' , "{$keyword}")->orWhereHas('cities' , function ($query) use ($keyword){ $query->where('name', 'like', "%{$keyword}%")->get(); }); }
  10. سلام وقت بخیر من میخام یه بخش تو پنل مدیریت ، قابلیت فعال و غیرفعال کردن منطقه ها رو اضافه کنم از طریق ایجکس استان و شهر و منطقه رو نمایش میدم حالا میخام اگه مثلا شهر تهران انتخاب شد تمام منطقه های مربوط به شهر تهران رو تو دیتابیس غیرفعال کنم یا بالعکس اگه غیرفعال هست بتونم فعال کنم ( میخوام یکجا تمام مناطق باهم فعال و غیرفعال بشن) نمیدونم از طریق ایجکس انجام بدم یا تو کنترلر این بخش گیر کردم برای اینکار یه فیلد به جدول منطقه اضافه کردم $table->tinyInteger('status')->default(1); حالا میخام بگم وقتی استان و شهر انتخاب شد دکمه فعال و غیرفعال سازی منطقه باشه مثل عکس زیر روت ها Route::get('/locations' , [AdminController::class , 'showLocation'])->name('locations'); Route::post('/locations/fetch-cities' , [AdminController::class , 'fetchCity']); Route::post('/locations/fetch-regions' , [AdminController::class , 'fetchRegion']); Route::post('/locations' , [AdminController::class , 'submitLocation'])->name('send.locations'); Route::get('locations/status/{location}', [AdminController::class ,'updatestatus'])->name('location.status'); کنترلر public function fetchRegion(Request $request) { // $data['regions'] = Region::where("city_id", $request->city_id) // ->get(); $data['regions'] = Region::where("city_id", $request->city_id)->whereStatus(1) ->get(); return response()->json($data); } public function submitLocation(Request $request , Region $region) { $request->validate([ 'province' => 'required', 'city' => 'required', 'region' => '', 'status' => '' ]); if (Region::where('city_id', $request->city)->count() > 0) { if ($request->region[0] == 'all') { $region = Region::where('city_id', $request->city)->get(); // auth()->user()->regions()->sync($region); $region = Region::updated([ 'status' => 0 ]); } else { $region = Region::findOrFail($request->region); auth()->user()->regions()->sync($region); } } else { return redirect(route('locations')); } return redirect(route('locations')); } فرم بلید <form method="POST" action="{{ route('send.locations') }}"> @csrf <div class="form-group"> <div class="col-8 m-auto mt-3 mb-3"> <select id="province-dropdown" name="province" class="form-select @error('province') is-invalid @enderror"> <option class="d-none">استان</option> @foreach ($provinces as $province) <option value="{{ $province->id }}">{{ $province->name }}</option> @endforeach </select> @error('province') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group"> <div class="col-8 m-auto mt-3 mb-3"> <select id="city-dropdown" name="city" class="form-select @error('city') is-invalid @enderror"> <option class="d-none disabled">شهر</option> </select> @error('city') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group"> <div class="col-8 m-auto mt-3 mb-5"> <select id="region-dropdown" name="region" class="form-select select @error('region') is-invalid @enderror"> <option class="d-none">منطقه</option> </select> @error('region') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="button mt-5 text-center"> <button type="submit" class="btn btn-info">ثبت</button> </div> </form> کدهای ایجکس $(document).ready(function () { $('#province-dropdown').on('change', function () { var idProvince = this.value; $("#city-dropdown").html(''); $.ajax({ url: "{{url('admin/locations/fetch-cities')}}", type: "POST", data: { province_id: idProvince, _token: '{{csrf_token()}}' }, dataType: 'json', success: function (result) { $('#city-dropdown').html('<option value=""> انتخاب شهر </option>'); $.each(result.cities, function (key, value) { $("#city-dropdown").append('<option value="' + value .id + '">' + value.name + '</option>'); }); $('#region-dropdown').html('<option value="">انتخاب منطقه</option>'); } }); }); $('#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>');
  11. خیلی خیلی لطف کردید ممنونم
  12. یه فیلد جدید اضافه کردم تو دیتابیس $table->boolean('favorite')->default(0); حالا شرط بر این اساس هم میخام بزارم نتونستم جواب بگیرم تو مدل favorite اضافه کردم public function isFavorite() { return $this->favorite ?? false; } شرط تو بلید @if (Auth::user()->isFavorite) یا این @if (Auth::user()->isFavorite == 1) نتونستم جواب بگیرم
  13. اینجا دارم کل کاربران رو نمایش میدم توی لیست بلید ، فورایچی که برای نمایش تمام کاربران سایت زدم برای این روت هم بر اساس ایدی کاربران گفتم لایک انجام بشه اشتباهه مگه ؟ یا من اشتباه متوجه شدم؟ <a href="{{ route('people.favorite' , $user->id ) }}"> <i class="fa fa-star text-black"></i> </a> الان تست گرفتم کار میکنه هم لایک هم انلایک ممنونم و اینکه روت get گذاشتم مشکلی که پیش نمیاد ؟بهتره از post استفاده کنم؟ و اینکه چطوری تو بلید میتونم شرط بزارم که اگه لایک شد ایکون انلایک نشون بده ؟ هر شرطی میزارم فقط یکیش نشون میده @if () <a href="{{ route('people.favorite' , $user->id ) }}"> <i class="fa fa-star text-black"></i> </a> @else <a href="{{ route('people.unFavorite' , $user->id ) }}" > <i class="fa fa-star text-warning"></i> </a> @endif
  14. جدول 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')); }); مدل favorite public $timestamps = false; protected $fillable = [ 'user_id', 'favorite_user_id', 'added_date' ]; public function user() { return $this->belongsTo(User::class); } مدل user public function favorites() { return $this->hasMany(Favorite::class); } route Route::get('/profile/favorite/{favorite}' , [IndexController::class , 'favorite'])->name('favorite'); Route::get('/profile/unfavorite/{favorite}' , [IndexController::class , 'unFavorite'])->name('unFavorite'); blade <a href="{{ route('favorite' , $user->id ) }}"> <i class="fa fa-star text-black"></i> </a> <a href="{{ route('unFavorite' , $user->id ) }}" > <i class="fa fa-star text-warning"></i> </a> controller public function favorite($favorite) { // $favorite_user_id = Favorite::find($user); // dd($favorite_user_id); // Favorite::create([ // 'favorite' => 1 , // 'user_id' => $user->id, // 'favorite_user_id' => $favorite_user_id, // ]); $favorite_user_id = Favorite::find($favorite); Favorite::create([ 'user_id' => auth()->user()->id, 'favorite_user_id' => $favorite_user_id, 'added_date' => Carbon::now() ]); // dd($favorite); return back(); } public function unFavorite($favorite) { // $favorite = Favorite::where('user_id' , $favorite->id)->first(); // $favorite->delete(); $favorite_user_id = Favorite::find($favorite); Favorite::where('user_id',auth()->user()->id) ->where('favorite_user_id',$favorite_user_id) ->delete(); return back(); } الان مشکل اینه وقتی روی دکمه مورد علاقه میزنم ارور زیر دارم SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'favorite_user_id' cannot be null INSERT INTO `favorites` (`user_id`, `favorite_user_id`, `added_date`) VALUES (5, ?, 2023 -02 -01 14: 08: 35)
  15. چطوری باید ایدی کاربری که لایک کرد رو ثبت کنم ؟اصلا ایدی که به روت میدم پیدا نمیکنه
  16. ممنون مهندس بله من میخام فقط برای کاربران باشه این چیزی که قرار دادید رو گذاشتم یه ارور دارم SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'favorite_user_id' cannot be null شما از api استفاده کردید به این شکل نوشتید ؟من باید به یه شکل دیگه بنویسم تا این ارور نده ؟
  17. این شکلی درسته ؟ برای ایدی خودم فقط حذف کار میکنه public function favorite(User $favorite) { Favorite::create([ 'favorite' => 1 , 'user_id' => $favorite->id, ]); return back(); } public function unFavorite(Request $request , User $favorite) { $favorite = Favorite::where('user_id' , $favorite->id)->first(); $favorite->delete(); return back(); }
  18. مشکل unfavorite حل کردم فقط نمیدونم تو این متد به چه شکل بنویسم که فقط برای ایدی خودم ایکون تغییر نکنه و برای همه کاربران اعمال بشه is_favorite_by_auth_user
  19. یکم تغییر دادم جدول رو به این شکل نوشتم $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->boolean('favorite')->default(0); تو کنترلر به این شکل نوشتم مشکلی که دارم وقتی روی دکمه favorite کاربر مثلا ایدی 2 میزنم تو دیتابیس ثبت میشه ولی تو ظاهر بلید تغییری نمیکنه ولی وقتی روی دکمه favorite ایدی که خودم لاگین کردم میزنم هم تو دیتابیس ثبت میشه هم تو بلید ظاهرش تغییر میکنه public function favorite(User $favorite) { Favorite::create([ 'favorite' => 1 , 'user_id' => $favorite->id, ]); return back(); } public function unFavorite(Request $request , User $favorite) { $deletd = Favorite::where('id', auth()->user()->id)->where('user_id' , $favorite->id)->update([ 'favorite' => 0 ]); // $favorite = Favorite::where('id' , $favorite->id)->where('user_id' , $favorite->id)->first(); // $favorite->delete(); return back(); }
  20. مهندس اینجا تو این تابع به چه شکل بنویسم دقیقا ؟ متاسفانه نتونستم حلش کنم public function is_favorite_by_auth_user() { $id = Auth::id(); $favorites = array(); foreach($this->favorites as $favorite): array_push($favorites , $favorite->user_id); endforeach; if(in_array($id , $favorites)) { return true; } else { return false; }
  21. بله جیکوئری لود شده این لاین به این شکل باید باشه ؟ public function getIsUserFavoritesAttribute(User $user) { return $this->favorites()->where('user_id', $user->id)->exists(); }
  22. ممنون مهندس برای این روش که با ایجکس هست مشکل کارم کجاست؟
  23. به یه روش دیگه هم انجام دادم از طریق ایجکس ولی جواب نگرفتم کنترلر public function store(User $user) { $user->favorites()->toggle( auth()->user()->id ); return response(['ok'], 200); } روت Route::middleware('auth')->post('/profile/favorite/{user}', [IndexController::class, 'store'])->name('favorite'); بلید <span class="single-page__favorite @if($user->is_user_favorite) single-page__favorite--is-active @endif"></span> اسکریپت <script> $(".single-page__favorite").on("click", function () { fetch('{{ route("favorite", $user->id) }}', { method: 'post', headers: { 'X-CSRF-Token': '{{ csrf_token() }}' } }).then((response) => { if(response.ok) { $(this).toggleClass("single-page__favorite--is-active"); } }) }) </script> سی اس اس .single-page__favorite::before { content: '★'; font-size: 25px; padding-bottom: 25px; } .single-page__favorite--is-active::before { content: ''; } مدل یوزر public function favorites() { return $this->hasMany(Favorite::class); } public function getIsUserFavoritesAttribute() { return $this->favorites()->where('user_id', auth()->user()->id)->exists(); } مدل favorite protected $fillable = [ 'user_id', ]; public function user() { return $this->belongsTo(User::class); } اشکال کارم کجاست؟ تو consol به این خط از جی اس ارور میده fetch('http://localhost:8000/profile/favorite/2', {
  24. الان من تو جدول منطقه فیلد ststus گذاشتم به این شکل میشه فعال و غیرفعال کرد ؟ که مثلا استان تو پنل مدیریتی انتخاب کنم بعد شهر رو از طریق همون ایجکس اطلاعاتش بگیرم و انتخاب کنم بعد انتخاب شهر برای منطقه گزینه فعال و غیرفعال فقط نمایش بده ؟؟ اگه میشه اینجوری لطفا راهنمایی کنید به چه صورت هست ممنون
  25. به یه روشی انجام دادم ولی جواب درستی نگرفتم هر دفعه که روی دکمه favorite کلیک میکنم فقط برای ایدی خودم هر دفعه تو دیتابیس ثبت میشه و unfavorite که میزنم ارور زیر دارم Call to a member function delete() on null جدول من Schema::create('favorites', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->timestamps(); }); مدل favorite class Favorite extends Model { protected $fillable = [ 'user_id', ]; public function user() { return $this->belongsTo(User::class); } } مدل user public function favorites() { return $this->hasMany(Favorite::class); } public function is_favorite_by_auth_user() { $id = Auth::id(); $favorites = array(); foreach($this->favorites as $favorite): array_push($favorites , $favorite->user_id); endforeach; if(in_array($id , $favorites)) { return true; } else { return false; } route Route::get('/profile/favorite/{favorite}' , [IndexController::class , 'favorite'])->name('favorite'); Route::get('/profile/unfavorite/{favorite}' , [IndexController::class , 'unFavorite'])->name('unFavorite'); controller public function favorite(Request $request , User $favorite) { Favorite::create([ 'id' => $favorite->id , 'user_id' => Auth::id() , ]); return back(); } public function unFavorite(User $favorite) { $favorite = Favorite::where('id' , $favorite->id)->where('user_id' , Auth::id())->first(); $favorite->delete(); return back(); } blade @if ($user->is_favorite_by_auth_user()) <a href="{{ route('profile.unFavorite' , $user->id ) }}" > <i class="fa fa-star text-warning"></i> </a> @else <a href="{{ route('profile.favorite' , $user->id ) }}"> <i class="fa fa-star text-black"></i> </a> @endif مشکل کارم تو کنترلره ؟؟ اگه بخوام بدون رفرش شدن صفحه انجام بدم از ajax باید استفاده کنم؟
×
×
  • جدید...