سلام وقت بخیر
ببخشید من یه وب دارم که ماهنامه ها رو میخوام داخلش بزارم
یه آرشیو دارم مال سال 97 و یه سری هم مال سال 98 یعنی 6 ماه گدشته
حالا میخوام یه صفحه درست کنم به اسم بایگانی آرشیو یا هر چیز دیگه ای
میخوام وقتی وارد صفحه آرشیو میشم
به شکلی که میگم برای آرشیو کنه
مثلا بزنه
آرشیو سال 97
روش که کلیک کردم تمام pdf های سال 97 بیاد
و یه آرشیوم برای سال 98 ایجاد کنه و این 6 ماه رو بریزه داخلش
و وقتی سال 98 به اسفند رسیدیم تموم شد خودکار یکی برای 99 ایجاد کنه
چطور اینو میتونم درست کنم؟
سلام خسته نباشید
با کوئری می تونید اینکار رو انجام بدید و فقط لازمه که ببینید چه تایمی این اطلاعات وارد شده و یا اگه مشخص نیست از طریق ایدی باید ببینید که چه زمانی بارگزاری شده یعنی از ایدی 1 تا 50 تو سال 97 بوده بعد شما کوئری می زنید که از ایدی 1 تا 50 را تو آرشیو 97 نشان بده
کار سختی نیست
درود
بسادگی با الکوئنت یا کوئری بیلدر میتونید این کارو انجام بدید
شما به کد SQL ای شبیه زیر احتیاج دارید، مثلا برای جدول posts:
select
year(created_at) year,
count(*) posts
from posts
group by year;
که اگر بخواهیم با الکوئنت همین کوئری رو بزنیم به شکل زیر میشه:
App/Post::selectRaw('
year(created_at) year,
count(*) posts
')->groupBy('year')
->get()
->toArray();
برای نمایش آرشیو مربوط به هر سال میتونید از بدنه درخواست (body of request).. سال و ماه مورد نظر برای اعمال تفکیک رو، از Querystring دریافت کنید.. یعنی هر گزینه آرشیو لینکی داشته باشه شبیه زیر:
http://domain/archive/?year=1398
سپس در کنترلر برای تشخیص این دادهها به شکل زیر (توجه داشته باشید که الکوئنت متدی به نام whereYear هم داره که در اینجا ازش استفاده میکنیم):
$posts = Post::latest();
if ($year = request('year')) {
$posts->whereYear('created_at', $year)
}
اگر قصد دارید چنین آرشیوی بسازید پیشنهاد میکنم قابلیت تفکیک به صورت ماهانه هم داشته باشید
موفق باشید
select
year(created_at) year,
count(*) posts
from posts
group by year;
خیلی عذر میخوام میشه اون تیکه قبل از from posts رو برام توضیح بدید
مثلا کنار count(*) چرا posts رو نوشتید یا کنار year(created_at ) چرا year رو نوشتید؟؟؟؟
درود.
در سینتکس SQL میتونیم به اطلاعاتی که میخواهیم اصطلاحا یه Alias بدیم. یا یه نام که میشه با اون در جاهای دیگه کوئری شروطی رو نوشت.. مثلا در این حالت به جای اینکه نام ستون رو created_at برگردونه.. به نام year برمیگردونه
در نظر بگیرید کوئری بالا در واقع شبیه زیره:
select
year(created_at) AS year,
count(*) AS posts
...
حالا این AS آپشنال هست و میتونیم استفاده هم نکنیم
@solmaz.ranji
همون روش بالاست ولی کمی عوض میشه:
کوئری:
App/Post::selectRaw('
year(created_at) year,
month(created_at) month,
count(*) posts
')->groupBy('year', 'month')
->get()
->toArray();
کنترلر:
$posts = Post::latest();
if ($year = request('year')) {
$posts->whereYear('created_at', $year)
}
if ($month = request('month')) {
$posts->whereMonth('created_at', $month)
}
$posts = $posts->get();
کنترلر فقط یک مثاله و روش های تمیز تری هم هست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟