Yii-数据库-活动记录问题
我是Yii php框架的新手。我了解python framework-django,并设法创建了基于MVC模式和数据库的应用程序。现在我想在php框架中创建一些其他项目/应用程序-我尝试了symfony,但现在我想尝试Yii。我的问题是如何用Yii的活动记录语言编写查询。我正在阅读大量文档,并使用Yii的shell(yiicshell config/main.php)尝试一些东西,但没有得到我想要的结果。我有三个表-A、B和C,其中C表只包含表A和B中的外键(它们的ID)。我只想使用第三个表(表C)建立多对多关系。我感到困惑的是,如何从表A中获取一些项/记录(例如,包含一些名称的记录-在SQL中,它类似于…名称,如xy),然后在表C中查找它们的ID,并找到所有匹配的ID(对),最后使用B的ID从表B中提取关于特定ID的更多信息。 非常感谢您花时间阅读本文,更感谢您为我提供了一些有用的信息Yii-数据库-活动记录问题,yii,Yii,我是Yii php框架的新手。我了解python framework-django,并设法创建了基于MVC模式和数据库的应用程序。现在我想在php框架中创建一些其他项目/应用程序-我尝试了symfony,但现在我想尝试Yii。我的问题是如何用Yii的活动记录语言编写查询。我正在阅读大量文档,并使用Yii的shell(yiicshell config/main.php)尝试一些东西,但没有得到我想要的结果。我有三个表-A、B和C,其中C表只包含表A和B中的外键(它们的ID)。我只想使用第三个表(表
注:如果您发现我的英语有任何错误,请告诉我-我想提高我的英语水平。我想您已经阅读了手册中的这一页了(如果没有,现在就做!): 无论如何,您有两个模型(AModel和BModel)和如下表结构:
TableA (table for AModel)
-a_id (primary key)
-otherfieldsA
TableB (table for BModel)
-b_id (primary key)
-otherfieldsB
TableC (relation table)
-a_id (foreign key in TableA)
-b_id (foreign key in TableB)
在AModel中,添加以下多个关系:
public function relations()
{
return array(
'BModels' => array(self::MANY_MANY, 'BModel', 'TableC(a_id, b_id)')
);
}
public function relations()
{
return array(
'AModels' => array(self::MANY_MANY, 'AModel', 'TableC(b_id, a_id)')
);
}
在BModel中,添加以下多个关系:
public function relations()
{
return array(
'BModels' => array(self::MANY_MANY, 'BModel', 'TableC(a_id, b_id)')
);
}
public function relations()
{
return array(
'AModels' => array(self::MANY_MANY, 'AModel', 'TableC(b_id, a_id)')
);
}
现在,要获取与AModel相关的所有BModel,可以执行以下操作:
$myAmodel = AModel::model()->findbyPk('1'); // give an id of an A model here
foreach($myAmodel->BModels as $aBmodel) { // get all of the related B's and loop
echo $aBmodel->otherfieldsB; // access data from the related B model
}
维卡也一样:
$myBmodel = BModel::model()->findbyPk('1'); // give an id of an B model here
foreach($myBmodel->AModels as $anAmodel) { // get all of the related A's and loop
echo $anAmodel->otherfieldsA; // access data from the related A model
}
注意:这并不能解决定义和分配新关系的问题,只是从现有关系中获取数据。要创建新的多个关系,您需要一些自定义代码来创建表单选择小部件,并保存和更新关系表(通常是模型的afterSave()方法中的自定义SQL)
Yii扩展存储库中有一些扩展提供了一些行为,这些行为使这变得更容易,如下所示: