Laravel 使用 ajax 请求在同一张桌子上返回父母的孩子?

Posted

技术标签:

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

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

【问题讨论】:

你想在表格中显示它?? 是的,我想在表格中显示 好的,您是否为表 territory_categories 和另一个在您的 territory_categories 表中具有外键的表创建了模型? 非常感谢亲爱的兄弟... 请尝试将这些信息编辑您的问题以澄清并获得改进的答案 【参考方案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]);
  

【讨论】:

以上是关于Laravel 使用 ajax 请求在同一张桌子上返回父母的孩子?的主要内容,如果未能解决你的问题,请参考以下文章

多个用户在同一张桌子上

在同一张桌子上加入两次的最佳方式是啥?

使用 AJAX 时 Laravel6 WhereHas Error 500

即使 url、路由器和控制器指向同一个地方,Laravel 和 Ajax 也会根据请求返回 404

Laravel 4.1 - 多个 ajax 请求导致会话持久性失败

三张桌子在同一个窗口,iPad