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

هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست

saber

مدیرکل
  • تعداد ارسال ها

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

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

  • Days Won

    77

پست ارسال شده توسط saber


  1. برای این کار میتونید فایل های .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');

     


  2. در در ۱۴۰۱/۱۱/۲۸ در 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

  3. در در ۱۴۰۱/۱۱/۲۸ در 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']);
            });

     

    اون جدولی که بهتون گفتم براساس اون سناریوی اولی بود که گفته بودید. الان میخواید بطور جداگانه برای هر محصولی تخفیف ایجاد کنید؟

    یا میخواید کدهای تخفیف استفاده شده رو برای هر محصولی مشخص کنید؟


  4. در در ۱۴۰۱/۱۱/۲۸ در 12:26، Paradox گفته است :

    اره اول به این شکل گفتن الان ولی تغییر کرد !! بابت هر کاربری که از کد تخفیف استفاده میکنه درصدها متفاوت باشه ...

    اگه 5 نفر استفاده کردن 50 درصد تخفیف اگه 10 نفر 100 درصد 

    یا به این شکل 

    یک بار استفاده شد بگه 20 درصد دوبار 40 و  5 بار استفاده کردم 100 درصد ...

    پس باید این شرایط باید جدول جدا درست کرد

    و اینکه درصدها رو بشه تغییر دادم باید کوئری زد فقط درسته ؟

     

    باید یه بخش تنظیمات داشته باشید و از طریق اون همیشه طبق نیازی که دارید تخفیف رو تعیین کنید مثلا در تنظیمات مشخص کنید تعداد معرف: x و میزان تخفیف y

    بعد براساس تعداد معرفیهای کاربر و تنظیماتی که انجام دادید میتونید میزان تخفیف رو محاسبه کنید.


  5. در در ۱۴۰۱/۱۱/۲۵ در 13:37، Paradox گفته است :

    یه سوال ایا نیازه جدول جدا برای فیلتر ایجاد بشه ؟

    من میخام فیلترهایی که برای کاربران قابل نمایش هست از پنل ادمین بشه مدیریتش کنه ( مثلا بتونم سن رو غیرفعال کنم تا فیلتر بر اساس موارد دیگه باشه و سن رو نشون نده موقع فیلتر کردن)

     

    برای این موضوع میتونید یه بخش تنظیمات توی پنل ادمین داشته باشید و بخشهایی رو که میخواید قابل فیلتر باشن از اونجا مشخص کنید و هر زمانی خواستید یه بخشی رو فعال یا غیرفعال کنید

    • تشکر 1

  6. توی پست اول گفتید هر کاربر که از کد معرف استفاده کنه مثلا 30 درصد تخفیف به کاربر معرف تعلق بگیره اگر اینطوری باشه و میخواید برای هر ثبت نام معرفی شده

    یه کد تخفیف جنریت کنید میتونید یه جدول برای تخفیفها بسازید و وقتی کاربری با کد یه کاربر ثبت نام کرد تخفیف رو براش توی جدول تخفیفها ثبت کنید

    این جدول هم میتونه ستونهای زیر رو داشته باشه:

    discount_id

    discount_user_id شناسه کاربری که تخفیف بهش تعلق گرفته

    discount_code کد تخفیف ایجاد شده

    discount_percent درصد تخفیف

    discount_status وضعیت تخفیف که 0 یا 1 بگیره که پیشفرض 0 باشه و زمانی که از کد تخفیف استفاده شد به 1 تغییر بدید که مشخص باشه کدوم تخفیفها استفاده شده

    created_at

    updated_at

    کلا تخفیف حالتهای مختلفی میتونه داشته باشه ولی با این روش به نظرم چیزی رو که میخواید میتونید پیاده سازی کنید.


  7. چون همه مناطق شما در یه وضعیت هستن و فعال یا غیرفعال هستن توی کنترلر که در متد 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

  8. با همون ستونها میتونید کار کنید یکی برای معرفی افراد جدید هست دومی هم که برای این هست که مشخص بشه کاربر توسط چه کسی معرفی شده و طبق همون ستون reagent_code باید تعداد افرادی رو که معرفی کرده پیدا کنید

    • تشکر 1

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


  10. باید روابط بین جداول رو اول ایجاد کنید بعد توی کوئریها ازشون استفاده کنید کلا روشهای مختلفی میشه به نتایج رسید ولی با روابط اول باید بین شهر و منطقه و کاربران روابطی رو که دارن ایجاد کنید مثلا به شکل زیر

    // 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

  11. بخش نمایش دکمه ها مربوط به جیکوئری هست و ارتباطی با لاراول نداره ولی باید توی قسمتی که 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

  12. الان مشکلتون این هست که چطوری دکمه های فعال یا غیرفعال رو نمایش بدید؟ چون میخواید بطور کلی مناطق رو فعال یا غیرفعال کنید و مثلا انتخاب یک یا چند منطقه ندارید کار راحتتری هست میتونید موقعی که لیست مناطق رو دریافت میکنید فیلد status رو هم بگیرید و براساس اون توی response بخش ایجکس هر کدوم از دکمه های فعال یا غیرفعال رو نمایش بدید و موقعی که روی دکمه مورد نظر کلیک شد عمل فعال یا غیرفعاسازی رو انجام بدید.


  13. نیازی نیست فیلد جدید اضافه کنید اون رو حذفش کنید. برای اینکه چک کنید کاربر توی لیست مورد علاقه هست یا خیر اول باید لیست کاربران مورد علاقه یه نفر رو دریافت کنید

    بعد توی حلقه 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

  14. توی 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

  15. در 12 ساعت قبل، Paradox گفته است :

    ممنون مهندس بله من میخام فقط برای کاربران باشه 

    این چیزی که قرار دادید رو گذاشتم یه ارور دارم 

    
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'favorite_user_id' cannot be null

    شما از api استفاده کردید به این شکل نوشتید ؟من باید به یه شکل دیگه بنویسم تا این ارور نده ؟

    خطا بخاطر این هست که favorite_user_id مقداری نفرستادید باید شناسه کاربری رو که میخواید توی لیست دلخواه قرار بگیره براش بفرستید. من با api اون مقدار رو با نام user_id براش ارسال کردم


  16. من یه توضیح کلی براتون مینویسم بررسی کنید و از روی اون پیاده سازی کنید. اگه فقط برای 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
×
×
  • جدید...