Laravel两张表

时间:2018-02-25 09:30:17

标签: laravel

我有一张桌子notices。该表的模型为Notice.php 在此表中,我有noticeid列。 我从notices表中获取了所有通知,并在我的视图中查看。这是我的控制器代码,用于获取所有通知。

public function index()
{
    $notice = Notice::orderBy('id','desc')->paginate(5);
    return view('teacher.notice')->withNotices($notice));
}

以下是我的观看代码,以显示所有通知。

 @foreach($notices as $notice)
   {{$notice->id}}
   {{ $notice->notices }}
 @endforeach

现在我想在这个foreach循环中放两个按钮。一个是confirm,另一个是remove confirmation。 为了存储此confirmation数据,我创建了另一个名为notice_confirmed_student的表,该表的模型为noticeConfirmedStudent.php。在这个表中有三列:

id
student_id
notice_id

如果学生点击确认,那么他的身份和通知ID将存储在此表中。我做得很完美。但我的问题是,在foreach循环中,它一次显示两个按钮(confirmremove confirm)。如果用户已经confirmed没有收到此通知,我想显示确认按钮。如果用户已经确认该通知,则应显示remove confirmation按钮。 在这里,我再次使用按钮给我的刀片foreach循环以便更好地理解。 Bellow代码并不完美,我刚刚编写了这些代码来理解我的问题。

@foreach($notices as $notice)
   {{$notice->id}}
   {{ $notice->notices }}
   <?php $student_id= "select student_id from notice_confirmed_student where notice_id=$notice->id"; ?>
   @if ($student_id == $auth::user()->id)
   <button>confirm</button>
   @else
   <button>Remove Confirmation</button>
   @endif
 @endforeach

提前致谢。

2 个答案:

答案 0 :(得分:2)

这里很少有错误/不正确,为了说清楚,

Notice&lt;&gt; User关系为Many-Manynotice_confirmed_student为数据透视表。所以用户模型应该有关系,

public function confirmedNotices()
{
     return $this->belongsToMany(Notice::class, 'notice_confirmed_student')
}

然后在每个循环中你可以检查,

if(in_array($notice-id, Auth::user()->confirmedNotices->pluck('id')->all())) {
     // user confirmed
} else {
    // user not confirmed.
}

答案 1 :(得分:1)

如果我正确理解了您的问题,您需要检查具有给定ID的记录是否存在notice_confirmed_student表,然后检查您的循环。用你的通知检索确认的学生。

$notice = Notice::with('notice_confirmed_student_or_whatever_your_relation_method_called)')->orderBy('id','desc')->paginate(5);

然后检查循环,如果相关属性不像你在视图中那样是空的

@if($notice->my_attr && $notice->my_attr->user_id == \Auth::user()->id)
   // do stuff
@else
  // it doesn't has record
@endif