Laravel 5数据库关系访问另一个表上的数据

时间:2015-04-21 06:47:26

标签: php laravel laravel-5

我有这种数据库设计

user_classes
- id
- user_id
- class_schedule_id

class_schedules
- id
- class_id
- date

classes
- id
- name

我现在在我的UserClass.php模型文件

public function classSchedule() {
   return $this->belongsTo('\App\ClassSchedule');
}

public static function getClassByUser($user_id){
  $user_class = self::where('user_id','=',$user_id)->with('classSchedule');
  //other codes here...
}

我的问题是如何在class表中访问类的名称,因为user_classes表没有直接访问类,而是应该首先访问class_schedule表。

我不确定应该使用Eloquent ORM Relationship

非常感谢您的帮助!

谢谢! :)

2 个答案:

答案 0 :(得分:0)

首先,您需要重命名第三个类,从类到其他类。然后试试这个,

class user_classes Extends Eloquent {

        function classSchedule() {
            return $this->hasMany('Class_schedules','class_schedule_id'); 
        }

    }

    class class_schedules Extends Eloquent {

        function userClasses() {
            return $this->belongsTo('user_classes', 'class_schedule_id');
        }

        function classSomething() {
            return $this->hasOne('class_something','id');
        }

    }

    class class_something Extends Eloquent {

       function classSchedules() {
           return $this->belongsTo('class_schedules', 'id');
       }
    }

答案 1 :(得分:0)

尝试并遵循Laravel中的命名惯例,这将使您的生活更轻松。 它使用多个模型名称的snake_cased版本自动定义表名。 除此之外,当您与单个或多个输出有关系时,请相应地命名您的关系方法,以描述它们的作用以及您可以期望的输出类型。

我更喜欢dir /app/Models用于模型,因此命名空间,如果你的模型在那里,你可以将其更改为/app

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UserClass extends Model
{
    // only defined because laravel auto generates alphabetically
    protected $table = 'user_classes';

    public function user()
    {
        // given that User model was moved to app/Models, if not, use \App\User
        return $this->belongsTo('\App\Models\User');
    }

    public function classSchedule()
    {
        return $this->belongsTo('\App\Models\ClassSchedule');
    }
}



<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class ClassSchedule extends Model
{
    public function class()
    {
        return $this->belongsTo('\App\Models\Class');
    }
}



<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Class extends Model
{
    public function classSchedules()
    {
        return $this->hasMany('\App\Models\ClassSchedule');
    }
}

现在你可以基本上为特定用户获取UserClass的所有条目,无论是否有预先加载......

$userClasses = UserClass::where('user_id', $userId)->get();

$userClasses->map(function($userClass) {
    echo $userClass->classSchedule->class;
});

更优选地,您的用户模型中将有一个带有hasMany关系的方法userClasses()