Php 以多对多和一对多关系访问数据
我不知道如何访问相关表(带有ActiveRecords)中的数据,并将所有这些记录用作CActiveDataProvider的数据源。其主要思想是,用户必须能够CRUD`只对其课程进行修改 我有以下表格:Php 以多对多和一对多关系访问数据,php,yii,Php,Yii,我不知道如何访问相关表(带有ActiveRecords)中的数据,并将所有这些记录用作CActiveDataProvider的数据源。其主要思想是,用户必须能够CRUD`只对其课程进行修改 我有以下表格: user (id, name, age, email...), user_class (user_id, class_id), class (id, name, description, ...), course (id, class_id, name, description); 用户表和
user (id, name, age, email...),
user_class (user_id, class_id),
class (id, name, description, ...),
course (id, class_id, name, description);
用户表和班级表具有多对多关系,班级表和课程表具有一对多关系
我还定义了以下关系:
'classes'=>array(
self::MANY_MANY,
'Class',
'user_class(user_id, class_id)',
),
'courses'=>array(
self::HAS_MANY,
'Course',
array('class_id','id'),
'through'=>'classes'
)
'class' => array(
self::BELONGS_TO,
'Class',
'class_id'
)
用户模型关系:
'classes'=>array(
self::MANY_MANY,
'Class',
'user_class(user_id, class_id)',
),
'courses'=>array(
self::HAS_MANY,
'Course',
array('class_id','id'),
'through'=>'classes'
)
'class' => array(
self::BELONGS_TO,
'Class',
'class_id'
)
类模型关系:
'users' => array(
self::MANY_MANY,
'User',
'user_class(class_id, user_id)'
),
'courses' => array(
self::HAS_MANY,
'Class',
'class_id'
),
课程模式关系:
'classes'=>array(
self::MANY_MANY,
'Class',
'user_class(user_id, class_id)',
),
'courses'=>array(
self::HAS_MANY,
'Course',
array('class_id','id'),
'through'=>'classes'
)
'class' => array(
self::BELONGS_TO,
'Class',
'class_id'
)
在我的CourseController
中,在actionManage()
上,我有如下内容:
public function actionManage() {
$currentUser = User::model()->with('classes', 'courses')->findByPk(Yii::app()->user->id);
$userCourses = $currentUser->classes->courses; //--> NO courses!!!
/* add users` courses to an CActiveDataProvider //--> how to do this?!
}
如果您尝试
var\u转储($currentUser->classes)代码>您会注意到它是一个数组
$userCourses=$currentUser->classes[0]->课程如果存在与$currentUser
由于您正在缓慢地加载许多内容(每个“类”在第一次被请求时加载其“课程”),这可能会使速度减慢,但现在,我想还是用它来运行吧。$userCourses=$currentUser->classes->courses
不起作用,因为$userCourses=$currentUser->classes
返回一个数组,因此与课程之间没有关系“这可能会成为慢行”,我如何改进它?任何例子/链接都很好。