Laravel 5.2如何通过laravel eloquent模型加入三个表

时间:2016-04-15 15:47:59

标签: php mysql laravel eloquent laravel-5.2

我有三个模特

1. user 
2. course 
3. fee

其中用户模型与具有一对多关系的课程表相关联,课程模型与费用表以一对一关系连接。

问题是,我必须找到用户选择课程的所有费用的总和,用户完成的课程应该是1.如何为其编写查询?

课程模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Course extends Model
{
    protected $table='courses';
    protected $fillable = ['name','date','publication_status'];


    public function fee(){
        return $this->hasOne('App\Fee','course_id', 'id');
    }
      public function user()
    {
        return $this->belongsToMany('App\User','course_id','id');
    }
}

用户模型:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $table='users';
     protected $fillable=['name','email','phone','course_id'];



          public function courses()
    {
        return $this->hasMany('App\Course','id','course_id');
    }
}

费用型号:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Fee extends Model
{
        protected $table='fees';
    protected $fillable = ['fee','course_id'];

    public function course()
    {
        return $this->belongsTo('App\Course', 'course_id', 'id');
    }
}

如果有人知道解决方案,请提供解决方案。

2 个答案:

答案 0 :(得分:0)

我想你可以先找到用户:

if(User::find($id)->complete_status == 1){
    $user = User::find($id);
}

在此之后,您将返回该用户的所有课程:

$courses = $user->courses;

最后,您将实施foreach声明以返还每门课程费用:

foreach($courses as $course){
    $feeSum += $course->fee->value;
}

传递您的费用金额以查看的示例:

return view('view_path' , compact('feeSum'));

假设$ feeSum与返回视图语句的函数相同。

返回变量后,在您的视图文件中添加以下内容:

<label>{{ $feeSum }}</label>

答案 1 :(得分:0)

您可能希望研究使用类似枢轴的关系。

您的用户模型可能包含以下内容:

# Get the fees for a user:
public function fees()
{
    return $this->hasMany('App\Fees', 'fees', 'courses', 'course_id', 'course_id')
                ->withPivot('iterate', 'fields', 'here', 'to', 'pass', 'on')
                ->withTimestamps();
}

上面的代码根本没有经过测试,但我非常确定 hasMany / belongsToMany 方法允许链接关系中的多个表。< / p>