Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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
Php 在yii框架活动记录模式中从关系表检索数据_Php_Mysql_Sql_Yii_Relational - Fatal编程技术网

Php 在yii框架活动记录模式中从关系表检索数据

Php 在yii框架活动记录模式中从关系表检索数据,php,mysql,sql,yii,relational,Php,Mysql,Sql,Yii,Relational,我想为应用程序的管理员生成一个报告。这是一个小的自由职业网站。 我正在为数据库使用yii1.1.14和Mysql。 数据库中有3个关系表,我想从中检索一些数据。 我只展示了那些相关的字段,它们可能是理解工作范围所必需的 包含字段的用户表: id |姓名|电子邮件|密码|类型(用户类型,自由职业者、项目所有者或管理员) 带字段的投标表: id |项目id(外键引用项目('id'))|自由职业者id(外键引用用户('id')) 包含字段的项目表: id | title | description |

我想为应用程序的管理员生成一个报告。这是一个小的自由职业网站。 我正在为数据库使用yii1.1.14和Mysql。 数据库中有3个关系表,我想从中检索一些数据。 我只展示了那些相关的字段,它们可能是理解工作范围所必需的

包含字段的用户表: id |姓名|电子邮件|密码|类型(用户类型,自由职业者、项目所有者或管理员)

带字段的投标表: id |项目id(外键引用项目('id'))|自由职业者id(外键引用用户('id'))

包含字段的项目表: id | title | description | selected |投标书(为项目选择的投标书的id)

id通常是主键

所以我想得到的是: 在前端的一张表格中,将所有的用户名、电子邮件、电话号码和关于他的项目的信息放在一行中,供所有人使用。 请建议实现这一目标的最佳方法是什么? 我已经试过了。 请不要发布Yii's docs或Larry's docs的基础教程。我已经通过了基本规则

我希望我说清楚了。
谢谢大家。

我对您的问题的理解是,您希望将3个表中的所有数据合并在一起。在这种情况下,您可以在控制器中使用联接查询

尽管我不确定你的链接模式,你的外键是否也是主键?但是你可以像

class User extends CActiveRecord{
    ...
    public function relations()
      {
        return array(
        'bids'=>array(self::HAS_MANY,'Bid','| freelancer_id'),
        'users'=>array(
            self::HAS_MANY,'Project',array('user_id'=>'id'),**'through'=>'bids'**
          ),

        );
    }
  }


//then use as ....
// get all Projects with all corresponding users
$user = User::model()->with('users')->findAll();
在您的用户模型中添加

class User extends CActiveRecord{
 ...
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'bid'=>array(self::BELONGS_TO, 'Bid', array('id'=>'freelancer_id')),
            'project'=>array(self::BELONGS_TO, 'Project', array('id'=>'selected_bid'), 'through'=>'bid')
        );
    }
}
class Bid extends CActiveRecord
{
    ...
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'project'=>array(self::BELONGS_TO, 'Project', array('id'=>'selected_bid'))
        );
    }
}
添加投标模型添加

class User extends CActiveRecord{
 ...
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'bid'=>array(self::BELONGS_TO, 'Bid', array('id'=>'freelancer_id')),
            'project'=>array(self::BELONGS_TO, 'Project', array('id'=>'selected_bid'), 'through'=>'bid')
        );
    }
}
class Bid extends CActiveRecord
{
    ...
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'project'=>array(self::BELONGS_TO, 'Project', array('id'=>'selected_bid'))
        );
    }
}

现在,您可以获得所有为项目选择的自由职业者。

是。来自2个表的影响:来自用户表的姓名、电子邮件、电话。项目名称、项目数量和项目表中的金额。由于用户与项目表没有任何直接关系,我必须引用其中的投标表。您的用户模型中的关系设置是否正确?如果你给我们看一下模型,会有帮助的。您是否也使用cgridview作为表格?我没有使用cgridview作为表格。这是我的用户模型,我的意思不是消极的,但如果你看过Yii的文档或Larry的教程,我很难相信这种情况没有被涵盖。请指出您的具体问题所在。首先给我们一些你编写的代码,解释为什么它不适合你。另外,你能告诉我如何在前端和控制器上显示它吗?我一直在尝试你指定的关系。恐怕我在加载前端或控制器时遇到了一些问题。我遇到的问题是它显示了每个用户的单个项目。我想让它显示他选择的所有项目。我想我必须通过一个foreach在projects字段中循环它,这不是我想要的工作方式。你能给我穿点什么吗?