اول یک رابطه یک به چند به خود جدول دسته بندی ها بزنید مثلکد زیر
public function childs()
{
return $this->hasMany('Category','parentId');
}
بعد یک متد استاتیک برای پیمایش درخت مورد نظر می نویسیم، روش کار هم توی پیمایش درخت ها سرچ کنید پیدا می کنید، این متد 3 تا ورودی می گیره، اولی مدل ریشه هست، دومی سطح هست برای نمایش همون _ ابتدا نام شاخه ها و سومی کاراکتر مورد استفاده مثلا - یا _
خروجی متد هم تگ های option برای استفاده در تگ select هست
public static function getNestedForCombo($cat, $level, $delimiter)
{
if(count($cat->childs) > 0)
{
$str = '';
$str .= '<option style="color:red">' . str_repeat($delimiter, $level) . $cat->name . '</option>';
$level++;
foreach($cat->childs as $child)
{
$str .= static::getNestedForCombo($child, $level, $delimiter);
}
return $str;
}
return '<option>' . str_repeat($delimiter, $level) . $cat->name . '</option>';
}
در انتها هم به این شکل استفاده کنید
$cat = Category::find(123);
$optionTags = Category::getNestedForCombo($cat, 0, '_');
$html = '<select>' . $optionTags . '</select>';