首先亮相,遺憾的代碼的大型發佈,但...嵌套關係
我有以下DB結構(不是我的選擇):
+---------+ +--------------+ +--------+
| 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執行此操作會是高手。
這是使用該結構的Sentry身份驗證軟件包,而您的ORM完全不喜歡它。只是增加一個特別命名的PK解決了所有問題。 – 2012-03-29 01:36:08
ORM使用的所有表格都必須具有PK,並且不允許將FK用作PK。所以如果這是由Sentry定義的表格佈局,那麼他們做錯了(如:以非FuelPHP兼容的方式)。 – WanWizard 2013-01-27 01:00:16