我是Yii php框架的新手.我知道python框架 - django并设法基于MVC模式和数据库创建应用程序.现在我想在php框架中创建一些其他项目/应用程序 - 我正在尝试symfony,但现在我想尝试Yii.我的问题/问题是如何用Yii的活动记录语言编写查询.我正在阅读大量文档并尝试使用Yii的shell(yiic shell config/main.php),但没有得到我想要的结果.我有三个表--A,B和C,其中C表只包含表A和B中的外键(它们的ID).我希望只使用第三个表(表C)来建立多对多关系.我很困惑,如何从表A中获取一些项目/记录(例如包含一些名称的记录 - 在SQL中它将类似于......名称LIKE xy),
PS:如果你发现我的英语有什么问题,请告诉我 - 我想用英语做得更好.
我假设您已经在手册中阅读了此页面(如果没有,请立即执行!):http: //www.yiiframework.com/doc/guide/1.1/en/database.arr
无论如何,你有两个模型(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)
Run Code Online (Sandbox Code Playgroud)
在AModel中,添加以下MANY_MANY关系:
public function relations()
{
return array(
'BModels' => array(self::MANY_MANY, 'BModel', 'TableC(a_id, b_id)')
);
}
Run Code Online (Sandbox Code Playgroud)
在BModel中,添加以下MANY_MANY关系:
public function relations()
{
return array(
'AModels' => array(self::MANY_MANY, 'AModel', 'TableC(b_id, a_id)')
);
}
Run Code Online (Sandbox Code Playgroud)
现在,为了获得与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
}
Run Code Online (Sandbox Code Playgroud)
反之亦然:
$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
}
Run Code Online (Sandbox Code Playgroud)
注意:这并不能解决定义和分配新关系的问题,只是从现有关系中获取数据.要创建新的 MANY_MANY关系,您需要一些自定义代码来制作表单选择小部件,并保存和更新关系表(通常是模型的afterSave()方法中的自定义SQL).
Yii扩展存储库中有一些扩展提供了使行为更容易的行为,如下所示:
| 归档时间: |
|
| 查看次数: |
2911 次 |
| 最近记录: |