Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii-数据库-活动记录问题_Yii - Fatal编程技术网

Yii-数据库-活动记录问题

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)。我只想使用第三个表(表

我是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的更多信息。 非常感谢您花时间阅读本文,更感谢您为我提供了一些有用的信息


注:如果您发现我的英语有任何错误,请告诉我-我想提高我的英语水平。

我想您已经阅读了手册中的这一页了(如果没有,现在就做!):

无论如何,您有两个模型(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扩展存储库中有一些扩展提供了一些行为,这些行为使这变得更容易,如下所示:


我的回答有助于回答您的问题吗?现在要向多人关系表添加条目吗?我总是会遇到外键约束错误:(有一些方便的扩展使这更容易()。基本上,在afterSave()方法中,您只需要执行一些DB插入。您可以直接使用SQL执行此操作,也可以为关系表创建AR模型,并保存它(如:)