[英]laravel 5.1 - retrieving data from 2 table and sending it to index page using foreach
[英]Retrieving data from pivot table in Laravel only using one foreach loop
我为用户、班次、模式创建了 3 路 pivot 表。 它被称为 pattern_shift_user。
[pattern_shift_user.][1]
Schema::create('pattern_shift_user', function (Blueprint $table) {
//$table->primary(['pattern_id', 'shift_id', 'user_id']);
$table->unsignedBigInteger('pattern_id');
$table->unsignedBigInteger('shift_id');
$table->unsignedBigInteger('user_id');
$table->timestamps();
$table->foreign('shift_id')->references('id')->on('shifts')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('pattern_id')->references('id')->on('patterns')->onDelete('cascade')->onUpdate('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
});
它通过多对多关系引用三个模型 这里是用户 model 的视图,它链接模式 model 和移位 model [用户模型][2]
public function patterns()
{
return $this->belongsToMany('App\Pattern', 'pattern_shift_user')->withPivot('shift_id');
}
public function shifts()
{
return $this->belongsToMany('App\Shift', 'pattern_shift_user')->withPivot('pattern_id');
}
我对每个 model 都做了同样的事情,它似乎工作,
我现在遇到的问题是将信息放入 Laravel 的表格中。 我想要 3 列标题为 DATE/DAY、SHIFT、STATION。
我可以获得所有我想显示的信息。 但是,我无法将信息分成列,因为每个循环使用多个表来引用不同的表,这是我认为的 Controller; 我正在使用索引 [控制器索引][3]
public function index()
{
$user = Auth::user();
$testUser = User::all();
$shift = Shift::all();
$pattern = Pattern::all();
return view('layouts/timesheet/index', ['user' => $user, 'shift' => $shift, 'pattern' => $pattern, 'testUser' => $testUser]);
}
然后在刀片文件中(我玩过这个负载),它目前看起来像这样
[Index.blade 文件夹][4]
<table class="table table-sm table-success">
<tr>
<th scope="col">DATE/DAY</th>
<th scope="col">SHIFT</th>
<th scope="col">STATION</th>
</tr>
<tbody class="table-light">
@foreach (Auth::user()->patterns as $patternUser)
@foreach ($user->shifts as $shiftUser)
<tr>
<td>{{ $patternUser['day_of_week'] }}</td>
<td>{{ $shiftUser['Name'] }}</td>
</tr>
@endforeach
@endforeach
</tbody>
</table>
我可以让我的日期和班次全部显示在 DATE/DAY 列下,或者我可以让 7 个星期一、7 个星期二等显示在 DATE/DAY 列和 SHIFT 列中; 7 个狗屎会一直循环,所以我有 7x7 的班次列表,
我对此非常了解,而且我不太擅长解释,所以如果我可以提供更多信息,请告诉我。
感谢您的任何帮助
(我还没有添加站点,因为我发现只有两列已经够难了。最终,我需要创建一个包含更多列的更大表格,所以我只想先从小范围内了解这一点)
编辑以包括更新的模型,
用户 Model每个用户将有一个模式,但将获得许多班次(因为有时他们会在模式之外获得额外的班次)
[用户模型][1]
public function patterns()
{
return $this->belongsToMany('App\Pattern', 'pattern_shift_user')->withPivot('pattern_id');
}
public function shifts()
{
return $this->belongsToMany('App\Shift', 'pattern_shift_user')->withPivot('shift_id');
}
模式 Model ,这只是一个显示日期、星期几的表格,如果银行假期突出显示,它将附加许多班次,并且将有许多用户使用相同的模式。
class Pattern extends Model
{
public function shifts()
{
return $this->belongsToMany('App\Shift', 'pattern_shift_user')->withPivot('shift_id');
}
public function users()
{
return $this->belongsToMany('App\User', 'pattern_shift_user')->withPivot('user_id');
}
}
班次 model (这只是每个班次的次数,大约有 100 个)属于许多模式,许多用户可以有相同的班次
class Shift extends Model
{
public function patterns()
{
return $this->belongsToMany('App\Pattern', 'pattern_shift_user')->withPivot('pattern_id');
}
public function user()
{
return $this->belongsToMany('App\User', 'pattern_shift_user')->withPivot('user_id');
}
}
我有一个想法,首先,你需要坚持一种关系。
假设模式是层次结构的顶部,因此您只能从 controller 返回$patterns
。
public function index()
{
$patterns = Pattern::all();
return view('layouts/timesheet/index', ['pattern' => $pattern]);
}
然后,在视图内部,这更像是分层遍历关系的伪代码,例如:
foreach ( $patterns as $pattern)
// print all the pattern data like pattern[day_of_week] etc..
foreach($pattern->shifts as $shift)
// print all the shift data like shift[name] etc..
foreach ($shift->users as $user)
// print all the shift data like user[name] etc..
@endforeach
@endforeach
@endforeach
这是我能想到的逻辑,您可以用您认为数据层次结构的顶部替换模式,并调整伪的 rest 以很好地打印数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.