Yii 和关系查询
Yii and Relational Queries
我有一些表有外键引用:
User
-> Tech
-> TechSchedule
-> Location
-> Customer
看来我可以使用以下查询一次来获取任何相关数据给用户。考虑以下查询:
// load the user model
$model = User::model()->findByPk( Yii::app()->user->id );
// print
echo "<pre>", print_r( $model->attributes ), "</pre>";
// print more about the user
echo "<pre>", print_r( $model->Tech->TechSchedule[0]->Location->Customer ), "</pre>";
打印出来
Array
(
[user_id] => 1
[username] => someusername
[password] => somepassword
[salt] => somesalt
)
Customer Object
(
[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[customer_id] => 14
[more customer data...]
)
[_related:CActiveRecord:private] => Array
(
)
[_c:CActiveRecord:private] =>
[_pk:CActiveRecord:private] => 14
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
(
)
[_validators:CModel:private] =>
[_scenario:CModel:private] => update
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)`
这是正常现象吗?如果是这样,那么编写关系查询的目的是什么,例如
$model = User::model()->with('Tech.TechSchedule.Location.Customer')->findByPk( Yii::app()->user->id );
当您执行类似 $model->Tech->TechSchedule[0]->Location->Customer
的操作时,您会看到 PHP 将向数据库发送一个查询,以获取您尝试访问的 each 关系。在您的情况下,这可能相当于发送到数据库的 4 个不同的数据库查询。在许多情况下,您希望减少 PHP 查询数据库的次数,因为它非常昂贵(时间方面)。
如果您执行类似 User::model()->with('...')
的操作,所有这些关系都将与用户模型结合在一起。如果您 知道 您将访问相关数据(减少到数据库的往返次数),这可能会节省您的时间,但如果您只想访问用户 [=25] 中的数据,则可能会带来不必要的数据=].
我有一些表有外键引用:
User
-> Tech
-> TechSchedule
-> Location
-> Customer
看来我可以使用以下查询一次来获取任何相关数据给用户。考虑以下查询:
// load the user model
$model = User::model()->findByPk( Yii::app()->user->id );
// print
echo "<pre>", print_r( $model->attributes ), "</pre>";
// print more about the user
echo "<pre>", print_r( $model->Tech->TechSchedule[0]->Location->Customer ), "</pre>";
打印出来
Array
(
[user_id] => 1
[username] => someusername
[password] => somepassword
[salt] => somesalt
)
Customer Object
(
[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[customer_id] => 14
[more customer data...]
)
[_related:CActiveRecord:private] => Array
(
)
[_c:CActiveRecord:private] =>
[_pk:CActiveRecord:private] => 14
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
(
)
[_validators:CModel:private] =>
[_scenario:CModel:private] => update
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)`
这是正常现象吗?如果是这样,那么编写关系查询的目的是什么,例如
$model = User::model()->with('Tech.TechSchedule.Location.Customer')->findByPk( Yii::app()->user->id );
当您执行类似 $model->Tech->TechSchedule[0]->Location->Customer
的操作时,您会看到 PHP 将向数据库发送一个查询,以获取您尝试访问的 each 关系。在您的情况下,这可能相当于发送到数据库的 4 个不同的数据库查询。在许多情况下,您希望减少 PHP 查询数据库的次数,因为它非常昂贵(时间方面)。
如果您执行类似 User::model()->with('...')
的操作,所有这些关系都将与用户模型结合在一起。如果您 知道 您将访问相关数据(减少到数据库的往返次数),这可能会节省您的时间,但如果您只想访问用户 [=25] 中的数据,则可能会带来不必要的数据=].