首先,对于大量发布代码感到抱歉,但是......
我有以下数据库结构(不是我的选择):
+---------+ +--------------+ +--------+
| users | | users_groups | | groups |
+---------+ +--------------+ +--------+
| id | | user_id | | id |
| name | | group_id | | name |
+---------+ +--------------+ +--------+
我与FuelPHP的ORM建立了关系:
class Model_User extends Orm\Model
{
protected static $_properties = array(
'id',
'name',
);
protected static $_has_many = array('usergroup');
}
class Model_Usergroup extends Orm\Model
{
protected static $_table_name = 'users_groups';
protected static $_properties = array(
'user_id',
'group_id',
);
protected static $_belongs_to = array('user', 'group');
}
class Model_Group extends Orm\Model
{
protected static $_properties = array(
'id',
'name',
);
protected static $_has_many = array('usergroup');
}
我现在正试图通过以下方式查询显示3个表中的所有数据:
$data['users'] = Model_User::find()
->related('usergroup')
->related('usergroup.group')
->get();
它正在归还:
Array
(
[1] => Model_User Object
(
[_is_new:Orm\Model:private] =>
[_frozen:Orm\Model:private] =>
[_data:Orm\Model:private] => Array
(
[id] => 1
[name] => somename
)
[_original:Orm\Model:private] => Array
(
[id] => 1
[name] => somename
)
[_data_relations:Orm\Model:private] => Array
(
[usergroup] => Array
(
)
)
[_original_relations:Orm\Model:private] => Array
(
)
[_view:Orm\Model:private] =>
[_iterable:protected] => Array
(
)
)
)
所以它开始找到users_groups但停止?我是否以正确的方式接受了这个?当然,我可以使用连接的常规查询来获得这个,但实际上知道如何使用ORM进行此操作将是一件事。
答案 0 :(得分:1)
这是一个多关系,检查文档以了解如何配置它。
您选择的解决方案仅在您需要使用users_groups表中的关系保存的其他属性时才有用。
答案 1 :(得分:1)
Gaaaak!它只是在users_groups表中错过了一个PK ...
class Model_Usergroup extends Orm\Model
{
protected static $_table_name = 'users_groups';
protected static $_primary_key = array('pk_id');
protected static $_properties = array(
'pk_id',
'user_id',
'group_id',
);
protected static $_belongs_to = array('user', 'group');
}