@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
}
}
سلام.
قبل از همه بگم که کد HTML گذاشتن توی مدل یه کار کاملا اشتباهه چون کار مدل خروجی HTML دادن نیست.
دوم اینکه شما تیبلت رو بهم نشون بده که برات کدشو بنویسم و این همه شلوغکاری نشه.
@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();
});
سلام وقتتون بخیر!
من نمیدونم خروجی 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();
@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
اینم تصویر خروجی فعلی
@yk5742g
توی کوئری بیلدر از orderBy استفاده کنین تا به ترتیبی که میخوایین برگرده. وقتی روی created_at (یا بهتر از اون id) با desc مرتب بشه، میشه چیزی که شما میخوایین. البته روی collection هم متد reverse رو داریم که کالکشن رو برعکس میکنه.
در ادامه صحبت دوستان ، از 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
فقط یک سوال چرا همه کدها رو توی بلید نوشتی؟ بنظرم ریفکتور کنید.
اون 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')
اعمال کنی ، مثال زدم شما باید توی همون مدل که اطلاعات رو میگیری بنویسی
سلام دوباره
پس ارایه رو برعکس کن 😂🤣
البته برعکس کرده بودی
تو حالت عادی تست کن بعد اگر نشد کد زیر رو
foreach (array_reverse(auth()->user()->period_time()) as $date)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟