【问题标题】:Laravel Collection Extended Relationship (Pass or Fail)Laravel 集合扩展关系(通过或失败)
【发布时间】:2018-05-04 01:12:52
【问题描述】:

我正在使用 Laravel 5.6。我有三个模型:用户、尝试、评估。我需要找出用户已通过或未通过的评估。当用户进行评估时,将使用 is_passing true 或 false 布尔值保存 Attempt 模型。下面是我的数据库结构。

User
ID | name

Attempt
ID | assessment_id | user_id | is_passing (bool)

Assessment
ID | name

我正在使用 User.php 模型文件并尝试创建一个集合,以便能够循环评估这样的评估

@foreach($user->assessmentsPassOrFail as $assessment)
    @if($assessment->passed)
        {{ $assessment->name }}
    @else
       <a href="link to assessment">{{ $assessment->name }}</a>
@endforeach

我的 User.php 中有以下内容,但需要对其进行调整以显示所有评估(通过或失败),而不仅仅是通过。

public function attempts()
{
    return $this->hasMany('App\Models\Attempt');
}

public function assessmentsPassOrFail(){
        return $this->attempts()->with('assessment')->where('is_passing', 1);
}

非常感谢您的帮助!在过去的 2 天里,我一直在用头撞墙!

【问题讨论】:

    标签: php laravel collections


    【解决方案1】:

    您指定了where('is_passing', 1),它只查找那些通过的。删除该声明。您可能需要将-&gt;get() 放在末尾。

    【讨论】:

      【解决方案2】:

      这是UserAssessment 之间的经典多对多关系,其中Attempt 充当连接表。请在此处查看 Laravel 的文档,具体为:https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

      在您的情况下,我会重写您的评估函数以反映其与User 关系的性质:

      public function assessments()
      {
        return $this->belongsToMany('App\Models\Assessments', 'Attempt')->withPivot('is_passing');
      }
      

      belongsToMany 方法依赖于一些 Laravel 约定来使表名和列名开箱即用,但所有这些都可以专门针对不遵循其预期约定的情况进行定义。在这种情况下,Laravel 期望连接表命名为assessment_user,并且期望其他表名是复数并且全部小写。因此,您可能必须在 belongsToMany 方法中显式定义参数才能使其正常工作。在此处查看详细信息:https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Model.html#method_belongsToMany

      withPivot 方法定义了在使用此关系时应检索联接表中的哪些字段。您现在可以像这样检索这个值:

      $user = App\Models\User::find(1);
      
      foreach ($user->assessments as $a) {
          echo $a->pivot->is_passing;
      }
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2014-09-13
        • 2021-01-28
        • 2020-05-07
        • 2017-06-03
        • 1970-01-01
        • 2014-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多