2015-04-21 118 views
1

我有這樣的數據庫設計的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

您的幫助將不勝感激!

謝謝! :)

回答

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'); 
     } 
    } 
+0

哦對。那應該是階級。這只是一個錯字。讓我編輯它。 :) – PinoyStackOverflower

+0

如何在我的'with('classSchedule');'? – PinoyStackOverflower

+0

用$ user_classes-> with('class_schedule.class_something') - > find() – RunningAdithya

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; 
}); 

更優選地你就會有一個方法userClasses()用的hasMany關係在你的用戶模型