我有这种数据库设计
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 :(得分: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()