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