【问题标题】:Laravel returning children of parents in same table using ajax request?Laravel 使用 ajax 请求在同一张桌子上返回父母的孩子?
【发布时间】:2020-08-26 20:17:31
【问题描述】:

使用 Laravel 5.7,我的表名是 region_categories。在这张表中我有these Columns in the table 如何使用与 ajax 请求的关系在同一个表中创建层次结构父级和子级?

【问题讨论】:

  • 你想在表格中显示它??
  • 是的,我想在表格中显示
  • 好的,您是否为表 territory_categories 和另一个在您的 territory_categories 表中具有外键的表创建了模型?
  • 非常感谢亲爱的兄弟...
  • 请尝试将这些信息编辑您的问题以澄清并获得改进的答案

标签: php mysql ajax laravel relationship


【解决方案1】:

您可以为此场景编写一个简单的自联接。在territory_categories模型中写一个关系。

public function children(){

  return $this->hasMany(territory_categories_model::class,'cat_parent_id', 'id');

}

现在从控制器向视图传递数据并编写一个 foreach 循环。您将能够访问层次结构。

$data = territory_categories_model::with('children')->get();

您现在可以访问父名称,它也是子名称。在这种情况下,父母将与每个孩子重复自己

 @foreach($data as $dt)
    @if($dt->children->isNotEmpty())
       @foreach($dt->children as $child)
          <td>{{ $dt->territory_category_name }}</td>
          <td>{{ $child->territory_category_name }}</td>
       @endforeach
    @endif
 @endforeach

【讨论】:

  • 亲爱的兄弟,我可以让所有父母都添加这个,但当我添加相同的代码时,不会让有孩子 td 的孩子显示为空。
  • 我想你明白了吗?你有没有像我为你创造的那样建立关系?
  • 查看cat_parent_id为null的记录将被视为父记录,但cat_parent_id不为null的记录将被视为子记录。这是一个自我加入,它已经制作了,但你不能拿起它。
  • 谢谢你,亲爱的兄弟,我工作得很好,实际上在 db 中记录父 id 是 null 这就是为什么它显示空 td 谢谢你的帮助
  • 好的兄弟,我也说到了这一点。请投票回答。
【解决方案2】:

这段代码运行良好,而不是上面一次 此代码适用于模型:

public function children() {
    return $this->hasMany('Category','parent');
}
public function parent() {
    return $this->belongsTo('Category','parent');
}

我用这样的方式在控制器中检索:

public function store(Request $request){
    if($request->territory_category_name){
      $validator = $request->validate(['territory_category_name' => 'required', 'active' => 'required']);
      $validator['cat_parent_id'] = $request->cat_parent_id;
      TerritoryCategory::create($validator);
    }
    $territoryCategories = TerritoryCategory::with('parent')->get();

    $data = [];
    foreach ($territoryCategories as $key => $territoryCategory){
      $key = ++$key;
      $data[] = "
      <tr>
        <td>$key</td>
        <td class='edit' data-url='/territoryCategory/update/$territoryCategory->id' data-id='$territoryCategory->id'>$territoryCategory->territory_category_name</td>
        <td>
          ".(isset($territoryCategory->parent->territory_category_name) ? $territoryCategory->parent->territory_category_name : '<badge class="badge badge-info"> Parent </badge>')."
        </td>
        <td>
          <input type='checkbox' name='active' ".($territoryCategory->active == 1 ? 'checked' : '')." disabled>
        </td>
        <td>
          <div class='btn-group' role='group' aria-label='First group'>
            <button data-method='PATCH' data-url='/territoryCategory/update/$territoryCategory->id' data-id='$territoryCategory->id' data-name='$territoryCategory->territory_category_name' data-active='$territoryCategory->active' type='button' class='btn btn-info territoryCategoryEdit' data-toggle='modal' data-target='#addTerritoryCategoryModal'><i class='la la-edit'></i></button>
            <button data-url='/territoryCategory/delete/$territoryCategory->id' data-id='$territoryCategory->id' type='button' class='btn btn-danger territoryCategorydelete'><i class='la la-trash'></i></button>
          </div>
        </td>
      </tr>
      ";
    }
    return response()->json(['success'=>'New Record added successfully!','territoryCategory' => $data]);
  }

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 2021-03-14
    • 1970-01-01
    • 2020-12-11
    • 2019-01-03
    • 2016-07-25
    • 2018-06-06
    • 2018-07-12
    • 2012-08-29
    相关资源
    最近更新 更多