سلام
جدول دسته بندی ها به این شکله
protected $fillable = ['id_category' ,'name' , 'parent_id'];
و این رکوردها برای تست هستند
1 program 0
2 website 1
3 backend 2
حالا با چه دستوری میتونم لیست آخرین سطح هر دسته رو بگیرم؟
$allCategory = Workshop_category::where('parent_id', '???');
حل شد.
model
public function child()
{
return $this->hasMany(Workshop_category::class , "parent_id" , "id");
}
blade
<select class="form-control" name="category_parent" id="">
<option value="0" selected>دسته بندی دوره</option>
@foreach($allCategory as $item)
@if($item->child->count() == 0)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@else
<option value="{{ $item->id }}" disabled>{{ $item->name }}</option>
@endif
@endforeach
</select>
سلام عزیز دل
احتمال میدم شما تازه کار باشید اگه میخوای برنامه نویسی باد بگیری بهتره یه آموزش ببینی و با یک سری اصول و امکانات اون زبان یا فریم ورک آشنا بشی اون وقت میتونی این مسائل رو حل کنی.
توی لاراکل می تونی با رابطه ها و ریلیشن ها سطح آخرو بخونی که نیازمنده این است با ریلیشن ها آشنا باشی.
سلام.
اول بذارین دو نکته بگم:
حالا برسیم به جواب سوال خوبی که پرسیدین:
SELECT *
FROM categories
WHERE id NOT IN (SELECT parent_id FROM categories WHERE parent_id IS NOT NULL);
توی این کوئری SQL که نوشتم، از یه subquery استفاده کردم. فقط دستهبندی backend رو برمیگردونه که سطح آخره و هیچ فرزندی نداره.
@muhammad
متشکرم از پاسخت
من id_category ندارم و id هست اما اینجا که سوال بهتر درک بشه این طوری گفتم.
این کوئری که نوشتید با laravel چطوری میشه؟
یک راه حل دیگه به ذهنم رسید اما فعلا ارور دارم.
در مدل دسته بندی رابطه با خود جدول ایجاد کردم
public function child()
{
return $this->hasMany(Workshop_category::class , "parent_id" , "id");
}
و هنگام فراخوانی
<select class="form-control" name="category_parent" id="">
<option value="0" selected>دسته بندی اصلی</option>
@foreach($allCategory as $item)
@if($item->child->count())
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endif
@endforeach
</select>
با ارور زیر موجه میشم
htmlspecialchars() expects parameter 1 to be string, array given
این رو تست کنین:
Category::whereNotIn('id', function ($query) {
$query->select('parent_id')->whereNotNull('parent_id');
})->get();
@hosseinshirinegad98
سلام دوست من
بله درسته تازه وارد هستم.
سبک یادگیری من پروژه محور هست ، به این معنی که با تعریف پروژه برای خودم و شروع به پیاده سازی در طول مسیر به هر چالشی برخورد کردم در مورد همان چالش تحقیق (ویدئو ، مقاله ، پرسش سوال و ...)کنم.
خوش حال میشم منابع مورد نظرتون در مورد این چالش رو اینجا معرفی کنید چون من قبلا مباحثی که گفتید رو تحقیق کردم اما این چالش بیان نشده بود.( احتمالا منابع من کامل نبوده) لطفا منبع خوب معرفی کنید.
متشکرم
@muhammad
با دستور زیر هم website و هم backend برگشت.
$lastLevelCategory = Workshop_category::whereNotIn('id', function ($query) {
$query->select('parent_id')->where('parent_id' , '0');
})->get();
@msdabbagh
توجه کنین که شما به جای whereNotNull یه where گذاشتین و گفتین اونجا که صفره! باید اینطور میذاشتین:
->where('parent_id', '<>', 0);
@msdabbagh
ببخشین من یه اشتباه ریز کرده بودم.
این رو امتحان کنین:
Category::whereNotIn('id', function ($query) {
$query->from('categories')->select('parent_id')->where('parent_id', '<>', 0);
})->get();
کدش رو که چک کردم، فهمیدم subquery به جدول رجوع نمیکنه برای همین from رو اضافه کردم.
سلام
این جمله رو در گوگل تایپ کنید و وارد اولین لینک شوید.
آموزش رابطه ها در لاراول رکسو
شما در مسئله بالا به رابطه یک به چند نیاز دارید.
در این سایت که گفتم یک دوره مناسب آموزش لاراول مقاله وار و رایگان در دسترس است.
متاسفانه امکان ارسال لینک مقاله مقدور نبود
@hosseinshirinegad98
متشکرم لینک https://www.roxo.ir/relationships-laravel-part-one رو مطالعه کردم اما در مورد نحوه صحیح فراخوانی کد زیر در blade اشاره ای نکرده بود.
public function comments()
{
return $this->hasMany('App\Comment');
}
و تنها گفته بود که میتوان به شکل زیر به comments دسترسی داشت.
$comments = App\Post::find(1)->comments;
foreach ($comments as $comment) {
//
}
اما طبق چالش من نیاز بود این عملیات بدون find(1) انجام بشه ، به این معنی که لیست همه فرزند ها بیاد و اگر
$item->child->count()
برابر 0 بود ، رکورد نمایش داده بشه. که در این مورد منبع معرفی شده توضیحی ندادند.
حل شد.
model
public function child()
{
return $this->hasMany(Workshop_category::class , "parent_id" , "id");
}
blade
<select class="form-control" name="category_parent" id="">
<option value="0" selected>دسته بندی دوره</option>
@foreach($allCategory as $item)
@if($item->child->count() == 0)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@else
<option value="{{ $item->id }}" disabled>{{ $item->name }}</option>
@endif
@endforeach
</select>
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟