php判断来源标题,php-根据关系获取标题(laravel)

这篇博客讲述了如何在Laravel应用中根据数据透视表动态展示学校、部门和班级信息。作者面临的问题是,在测试页面上根据测试的范围(学校、部门或班级)正确显示相关信息。解决方案包括在测试模型中添加关系和辅助函数,以便确定测试的直接父级,并在Blade模板中根据测试的范围显示相应信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所以我有以下分类法:

>学校

>部门

>班级

一所学校有很多部门.一个部门有很多班.

部门属于学校.班级属于部门和学校.

学校,部门或班级可以分配测试.这是通过数据透视表确定的,如下所示:

>学校测试

>部门测试

> class_test

所有这些都绝对完美,但是在测试页上,我希望能够显示以下信息:

学校名称|部门名称|班级名称

如果是在学校范围内,则应仅显示学校名称.

如果是全系,则应显示:学校名称|部门名称.

如果是上课,则应显示:学校名称|部门名称|班级名称.

我的刀片服务器代码如下所示:

{{$test->school->first()->name}}

@if($test->department->isNotEmpty())

  |  

{{$test->department->first()->name}}

@if($test->class->isNotEmpty())

  |  

{{$test->class->first()->name}}

@endif

@endif

这在学校范围内的测试中效果很好,但在我尝试为课程加载测试时会中断,因为它显然与数据透视表没有关系.相反,我需要做这样的事情:

{{$test->class->first()->department->school->name}}

这遍历了各种关系,但是我如何将其巧妙地纳入考虑范围以解决不同的情况?

欢迎所有帮助!

解决方法:

获取所有测试$tests = Test :: all()(或根据需要添加查询范围)

使用@foreach($tests作为$test)遍历每个测试

将关系添加到学校,部门,班级的测试模型班级

function school() {

$this->belongsTo(School::class);

}

创建一个辅助函数来确定测试直接属于什么

function isFor($parent) {

switch($parent) {

case 'school':

return $this->school;

case 'department':

return $this->department;

case 'class':

return $this->class;

}

}

然后您可以在视图中使用它来检查测试直接属于什么

@if($test->isFor('school'))

如果您不想切换/区分大小写,请使用if / elseif做类似的事情

function isFor() {

if($this->school) {

return 'school';

}

elseif($this->department) {

return 'department';

}

elseif($this->class) {

return 'class';

}

}

然后在视图中类似:

@if($test->isFor() == 'school')

确定直接父级是什么之后,您可以直接从父级访问名称,而不必经历其他关系,因此:

@if($test->isFor('department'))

{{ $test->department->name }}

我也建议为每个不同的视图创建不同的局部/视图

@if($test->isFor('department'))

@include('partials.test-department')

@endif

并准确地将该视图包含在该部分视图中

标签:relationship,laravel,blade,php

来源: https://codeday.me/bug/20191110/2013431.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值