نوب
3 سال پیش توسط نوب مطرح شد
10 پاسخ

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

@ali.bayat
@Rp76
@mohaligateway
@juza66
سلام دوستان
توی مدل میخوام تا 10 روز قبل راروی یه جدول حلقه بزنم و جمع ستون sum_price را بگیرم ولی هرکاری میکنم با کربن نمیشه
چون توی جدول ستون created_at زمان هم ذخیره میشه و من میخوام فقط بر اساس تاریخ ایجادها بررسی کنم و نمیخوام زمان created_at را مدنظر قرار بده
لطفا کمک کنید
سپاس

public function works_pu()
    {
        $period = CarbonPeriod::create(Carbon::now()->subDays(10), Carbon::now());
        foreach ($period as $date) {
            $query = $this->hasMany(work::class)->where('created_at', '=', $date->toDateString())->sum('sum_price');
            ?>
            <li class="list-group-item d-flex justify-content-between align-items-center">
                <span>درآمد <?php echo $date->toDateString() ?></span>
                <span class="badge badge-info badge-pill badge-round ml-1"><?php echo $query?></span>
            </li>
            <?php

        }
    }

ثبت پرسش جدید
Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
0

سلام.

قبل از همه بگم که کد HTML گذاشتن توی مدل یه کار کاملا اشتباهه چون کار مدل خروجی HTML دادن نیست.
دوم اینکه شما تیبلت رو بهم نشون بده که برات کدشو بنویسم و این همه شلوغ‌کاری نشه.


نوب
تخصص : کدنویس نوب :)
@yk5742g 3 سال پیش مطرح شد
0

@muhammad
سلام
این کد تیبل works

Schema::create('works', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->unsignedBigInteger('customer_id');
            $table->foreign('customer_id')->references('id')->on('customers');
            $table->unsignedBigInteger('office_id');
            $table->foreign('office_id')->references('id')->on('offices');
            $table->string('price');
            $table->string('sum_price');
            $table->string('price_off');
            $table->string('price_one');
            $table->enum('invoice_paid',['no','yes'])->default('no');
            $table->enum('invoice',['no','yes'])->default('no');
            $table->string('stock');
            $table->string('type');
            $table->string('deposit');
            $table->string('status');
            $table->string('invoice_id')->nullable();
            $table->text('information')->nullable();
            $table->timestamps();
        });

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش آپدیت شد
1

سلام وقتتون بخیر!

من نمیدونم خروجی CarbonPeriod چطور هست ولی پیشنهاد من اینه!

البته قبلش بگم که اینکار رو کنی سریع تموم میشه همه مشکلات، البته اگر خروجی carbon period تاریخ باشه فقط

$query = $this->hasMany(work::class)->where('createdat',"like","% {$date->toDateString()}%")->sum('sumprice');

ولی راه حل من چیه؟

$date="2020-01-01";  
$data=Model::wehreDate("createdat",$date)->selectRaw("*,sum('sumprice') as newsum")->get(); // in code toye controller bayad bezari va data ro bedi be blade

باید بگم که کد من فقط برای یک روز رو میاره برای این که بین ۲ تا تاریخ باشه باید اینکار رو کنی

$start="2020-01-01";  
$end="2021-01-01";

$data=Model::wehreDate("createdat",">=",$start)->wehreDate("createdat","<=",$end)->selectRaw("*,sum('sumprice') as newsum")->get();

نوب
تخصص : کدنویس نوب :)
@yk5742g 3 سال پیش مطرح شد
0

@Rp76 سلام عزیز
با راهنمایی شما درست شد ممنون :)
فقط یه مشکلی دارم
میخوام حلقه برعکس اجرا بشه
یعنی تاریخ امروز اول قرار بگیره و تاریخ روزهای گذشته به ترتیب بعدا قرار بگیره ولی الان برعکسه و تاریخ روز فعلی آخر قرار میگیره
کدها را میزارم

متد درون مدل User

public function period_time()
    {
        return CarbonPeriod::create(Carbon::now()->subDays(2), Carbon::now());
    }

کد دورن فایل view

@foreach (auth()->user()->period_time() as $date)
                                @php($sum = \App\Models\work::where('user_id', auth()->user()->id)->whereDate("created_at", $date)->sum('sum_price'))
                                    <div class="row shadow-sm border border-1 border-success align-middle mb-1">
                                        <div class="col-lg-6">درآمد تاریخ : {{verta($date)->format('d %B Y')}}</div>
                                        <div class="col-lg-6 text-left">
                                            {{number_format($sum)}}
                                            <br>
                                            {{$numToWord->numberToWords($sum)}}
                                        </div>
                                    </div>
                            @endforeach

اینم تصویر خروجی فعلی
اسکرین شات


Muhammad
تخصص : Back-End Developer
@muhammad 3 سال پیش مطرح شد
0

@yk5742g
توی کوئری بیلدر از orderBy استفاده کنین تا به ترتیبی که می‌خوایین برگرده. وقتی روی created_at (یا بهتر از اون id) با desc مرتب بشه، میشه چیزی که شما می‌خوایین. البته روی collection هم متد reverse رو داریم که کالکشن رو برعکس می‌کنه.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

در ادامه صحبت دوستان ، از reverse کردن اطلاعات میتونی استفاده کنی ، مثلا یک کار مبتدیانه اش اینه توی حلقه اینکار رو کنی

@foreach (auth()->user()->period_time()->reverse() as $date)
                                @php($sum = \App\Models\work::where('user_id', auth()->user()->id)->whereDate("created_at", $date)->sum('sum_price'))
                                    <div class="row shadow-sm border border-1 border-success align-middle mb-1">
                                        <div class="col-lg-6">درآمد تاریخ : {{verta($date)->format('d %B Y')}}</div>
                                        <div class="col-lg-6 text-left">
                                            {{number_format($sum)}}
                                            <br>
                                            {{$numToWord->numberToWords($sum)}}
                                        </div>
                                    </div>
                            @endforeach

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

دوستان جواب دادند از order by استفاده کنی حل میشه بر اساس id


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

فقط یک سوال چرا همه کدها رو توی بلید نوشتی؟ بنظرم ریفکتور کنید.
اون orderby که آقای محمد و رضا اشاره کردن رو باید روی کدهات مثلا

$sum = \App\Models\work::where('user_id', auth()->user()->id)->whereDate("created_at", $date)->sum('sum_price')

یعنی میشه


$sum = \App\Models\work::where('user_id', auth()->user()->id)->whereDate("created_at", $date)->orderBy('id', 'DESC')->sum('sum_price')

اعمال کنی ، مثال زدم شما باید توی همون مدل که اطلاعات رو میگیری بنویسی


نوب
تخصص : کدنویس نوب :)
@yk5742g 3 سال پیش مطرح شد
0

@Rp76
@juza66
سلام دوستان عزیز

این چیزایی که گفتین برای order کردن خروجی از دیتابیس هست
اگر دقت کنید شمارش خونه های حلقه بر اساس subDays از Carbon صورت میگیره
یه جوری باید حلقه را برعکس کنم :)


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

سلام دوباره

پس ارایه رو برعکس کن 😂🤣
البته برعکس کرده بودی
تو حالت عادی تست کن بعد اگر نشد کد زیر رو

foreach (array_reverse(auth()->user()->period_time()) as $date)

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام