【发布时间】:2019-12-31 06:37:12
【问题描述】:
我有一个模型,它是存储各种表的外键数据。这是模型的详细信息:
class InstituteStage extends Model
{
protected $guarded = [];
public function branch()
{
return $this->belongsTo('App\Model\Branch');
}
public function version()
{
return $this->belongsTo('App\Model\Version');
}
public function shift()
{
return $this->belongsTo('App\Model\Shift');
}
public function stage()
{
return $this->belongsTo('App\Model\Stage');
}
public function academic_year()
{
return $this->belongsTo('App\Model\AcademicYear');
}
}
现在,如果我获取数据,我正在获取这些字段:
Array
(
[0] => Array
(
[id] => 3
[stage_for] => Teachers
[branch_id] => 1
[version_id] => 1
[shift_id] => 1
[stage_id] => 1
[academic_year_id] => 1
)
[1] => Array
(
[id] => 4
[stage_for] => Students
[branch_id] => 2
[version_id] => 2
[shift_id] => 2
[stage_id] => 2
[academic_year_id] => 2
)
)
现在我想要其他表的详细信息(例如名称)。我正在寻找的回应是:
Array
(
[0] => Array
(
[id] => 3
[stage_for] => Teachers
[institute_stage_name] => "branch_name->version_name->shift_name->stage_name"
)
[1] => Array
(
[id] => 4
[stage_for] => Students
[institute_stage_name] => "branch_name->version_name->shift_name->stage_name"
)
)
我可以使用预加载获取数据并将它们连接到前端。但我想使用将返回此详细信息的自定义模型。有没有可能得到这个结构!
我在我的模型中创建了另一个静态方法并获取了所有数据:
public static function student_institute_stage_data()
{
return static::where([
['stage_for', 'Students'],
['status', 'active']
])
->with(['branch', 'version', 'shift', 'stage'])
->get();
}
然后在我的控制器中:
$instituteStage = InstituteStage::student_institute_stage_data();
在那之后在我的刀片中,我正在这样做 ->
@foreach ($instituteStage as $stage)
<option value="{{ $stage->id }}" {{ old('institute_stage_id') === $stage->id ? 'selected' : '' }} >{{ $stage->branch->name . "->" . $stage->version->name . "->" . $stage->shift->name . "->" . $stage->stage->name }}</option>
@endforeach
【问题讨论】:
-
你能提供你控制器的代码吗,你试过什么?
-
现在我正在做很长的路要走,使用急切加载分别获取所有数据,然后进入刀片,我将它们连接到我需要的地方。
-
您需要在控制器中执行此操作,因此如果您共享最少的代码部分,将有助于其他人解决您的问题。 :)
标签: laravel laravel-5 eloquent laravel-5.8