یه جدول درست میکنی به نام calendar که این ستون هارو داشته باشه:
id(bigInt) | date(date) | day_of_week(enum) | is_off(tinyInteger)
ستون id باید تاریخ فارسی باشه بصورت به هم چسبیده. مثلا امروز میشه:
id => 13960901 | date => 2017-11-22 | day_of_week => 'wednesday' | is_off => 0
حالا میری داخل seeder یه حلقه درست میکنی به تعداد روزهایی که میخای تو تقویم داشته باشی مثلا 365 تا برای یک سال. جدولو پر میکنی. بعدش دیگه هرمدلی که میخای باهاش رابطه داشته باشی، براش relation تعریف میکنی. میتونی بسته به نیازت، ستون های دیگه هم اضافه کنی. من فقط ستون های اصلیو گفتم. حالا برای نشون دادنش:
کنترلر:
public function calendar($year = null, $month = null)
{
$datelist = [];
if ($year && $month) {
$id_format = $year.$month;
} else {
$id = DB::table('calendars')->where('date', date('Y-m-d'))->value('id');
$id_format = substr($id, 0, 6);
}
$res = Calendar::where('id', 'like', $id_format . '%')
->get(['id', 'date' ,'day_of_week', DB::Raw("day_of_week * 1 AS day_num")])
->toArray();
if (! empty($res)) {
foreach ($res as $key => $val) {
preg_match('/^(d{4})(d{2})(d{2})$/', $val['id'], $date);
$val['date'] = $date;
$current_month = $date[2];
$current_year = $date[1];
$firstDate = 7 -((7 + $date[3] - $val['day_num']) % 7);
if ($date[3] == '01') {
for ($i = 0; $i < $firstDate; $i++)
$datelist[floor(($date[3] + $firstDate - 1) / 7)][$i] = null;
}
$datelist[floor(($date[3] + $firstDate - 1) / 7)][($date[3] + $firstDate - 1) % 7] = $val;
}
if ($current_month == 12) {
$next_month = 1;
$next_year = $current_year + 1;
} else {
$next_month = $current_month + 1;
$next_year = $current_year;
}
if ($current_month == 01) {
$prev_month = 12;
$prev_year = $current_year - 1;
} else {
$prev_month = $current_month - 1;
$prev_year = $current_year;
}
if ($next_month <= 9) {
$next_month = '0' . $next_month;
}
if ($prev_month <= 9 ) {
$prev_month = '0' . $prev_month;
}
}
return view('calendar', [
'calendars' => $datelist,
'current_year' => @$current_year,
'current_month' => @$current_month,
'next_year' => @$next_year,
'next_month' => @$next_month,
'prev_month' => @$prev_month,
'prev_year' => @$prev_year
]);
}
داخل ویو:
<table class="table table-bordered">
<thead>
<tr>
<th>شنبه</th>
<th>یکشنبه</th>
<th>دوشنبه</th>
<th>سه شنبه</th>
<th>چهارشنبه</th>
<th>پنج شنبه</th>
<th>جمعه</th>
</tr>
</thead>
<tbody>
@foreach($calendars as $calendar)
<tr>
@foreach($calendar as $cal)
<td>
<div class="day">{{ substr($cal['id'], 6, 8) }}</div>
</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
خیلی ممنون از پاسختون
فقط اگه میشه بگین داخل کنترلر متغیر p_date از کجا اومده و به چی اشاره میکنه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟