Activerecord Yii CGridview-搜索/排序工作正常,但值不';t显示在各个单元格上

Activerecord Yii CGridview-搜索/排序工作正常,但值不';t显示在各个单元格上,activerecord,yii,Activerecord,Yii,我对Yii CGridView的问题感到半失望,任何帮助或指导都将不胜感激 我有两个相关的表shop(shop_id primary)和contacts(shop_id foreign),这样一个店铺可能有多个联系人。我使用CGridview来提取记录和排序,我在shops模型中的关系函数类似于: 'shopscontact' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id'); 在店铺网格上,我需要显示包含任何一个可用联系人的店铺行。

我对Yii CGridView的问题感到半失望,任何帮助或指导都将不胜感激

我有两个相关的表shop(shop_id primary)和contacts(shop_id foreign),这样一个店铺可能有多个联系人。我使用CGridview来提取记录和排序,我在shops模型中的关系函数类似于:

  'shopscontact' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id');
在店铺网格上,我需要显示包含任何一个可用联系人的店铺行。我尝试过滤、搜索网格,效果很好,但我陷入了一个非常奇怪的问题。相应的网格列不显示预期的值

在CGridview文件中,我做了如下操作

  array(
    'name' => 'shopscontact.contact_firstname',
    'header' => 'First Name',        
    'value' => '$data->shopscontact->contact_firstname'
    ),
显示联系人的名字。但是,即使在搜索/排序都正常工作的情况下(我通过检查数据库关联发现),网格列也是空的!:(当我进行var_转储时

 array(
    'name' => 'shopscontact.contact_firstname',
    'header' => 'First Name',
    'value' => 'var_dump($data->shopscontact)'
    ),
转储在_private属性中显示记录值,如下所示:

  private '_attributes' (CActiveRecord) => 
    array
      'contact_firstname' => string 'rec1' (length=4)
      'contact_lastname' => string 'rec1 lsname' (length=11)
      'contact_id' => string '1' (length=1)
  $criteria->with = array(
    'owner', 
    'states', 
    'shopscontacts' => array(
      'alias' => 'shopscontacts',
      'select' => 'shopscontacts.contact_firstname,shopscontacts.contact_lastname',
      'together' => true
    )
  );

我在模型中的标准代码如下:

  private '_attributes' (CActiveRecord) => 
    array
      'contact_firstname' => string 'rec1' (length=4)
      'contact_lastname' => string 'rec1 lsname' (length=11)
      'contact_id' => string '1' (length=1)
  $criteria->with = array(
    'owner', 
    'states', 
    'shopscontacts' => array(
      'alias' => 'shopscontacts',
      'select' => 'shopscontacts.contact_firstname,shopscontacts.contact_lastname',
      'together' => true
    )
  );


如何访问它们各自列中的值?请帮助!:(

因为'shopscontact'是具有多个关系的名称,
$data->shopscontact
应该返回一个包含所有相关商店的数组…您是否修改了该关系以便只返回一条记录(如果我没有弄错,你只需要显示一个,对吗?)如果你这样做了,我可以看看你的过滤代码吗


顺便说一句,你有没有尝试过快速但暂时的解决方案:你有没有尝试过
'value'=>'$data->shopscontact['contact\u firstname']“

由于'shopscontact'是具有多个关系的名称,
$data->shopscontact
应该返回一个包含所有相关商店的数组……您是否修改了关系以便只返回一条记录(如果我没有弄错,您只需要显示一条,对吗?)?如果您这样做了,我可以查看您的筛选代码吗


顺便说一句,你有没有试过快速但暂时的解决方案:你有没有试过
'value'=>'$data->shopscontact['contact_firstname']

嗯,我没有用with()和together()这个词方法很多。有趣的是,在列的“值”部分,
$data->shopscontacts
如何根据
relations()
定义(而不是基于您声明的
标准)重新加载关系

处理阵列输出的更简洁的方法可能如下所示:

'value' => 'array_shift($data->shopscontacts)->contact_lastname'
也许更好的方法是建立一个新的(额外的)关系,就像在您的
商店
模型中这样:

public function relations()
{
  return array(
    'shopscontacts' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id'), // original
    'firstShopscontact' => array(self::HAS_ONE, 'Shopsmodel', 'shop_id'), // the new relation
  );
}
然后,在CGridView中,您可以设置如下列:

'columns'=>array(
  'firstShopscontact.contact_lastname',
),

干杯

嗯,我没有太多使用with()和together()方法。有趣的是,在列的“value”部分,
$data->shopscontacts
如何根据
关系()
定义(而不是基于您声明的
标准)重新加载关系

处理阵列输出的更简洁的方法可能如下所示:

'value' => 'array_shift($data->shopscontacts)->contact_lastname'
也许更好的方法是建立一个新的(额外的)关系,就像在您的
商店
模型中这样:

public function relations()
{
  return array(
    'shopscontacts' => array(self::HAS_MANY, 'Shopsmodel', 'shop_id'), // original
    'firstShopscontact' => array(self::HAS_ONE, 'Shopsmodel', 'shop_id'), // the new relation
  );
}
然后,在CGridView中,您可以设置如下列:

'columns'=>array(
  'firstShopscontact.contact_lastname',
),

干杯

您好,您是否修改了关系以便只返回一条记录?对不起,我是Yii的新手。我还没有故意这样做。另外,
'value'=>'$data->shopscontact[\'contact\'u firstname\']“
是我尝试过的,但没有成功。此外,我现在编辑了上面的帖子,并添加了我正在使用的
$criteria->with
。我成功访问了如下值
'value'=>'$data->shopscontacts[0][“contact_lastname”]“
但我确定这不是应该怎么做的。快到了,你能再分享一些吗?嗨,你修改了关系以便只返回一条记录吗?对不起,我是Yii的新手。我还没有完全有意地做这样的事情。另外,
“value”=>“$data->shopscontact[\'contact\u firstname\]“
是我尝试过的,但没有成功。此外,我现在编辑了上面的帖子,并用我正在使用的“
添加了
$criteria->”。我设法访问了这样的值
'value'=>“$data->shopscontacts[0][“contact_lastname”]”
,但我确定这不是应该做的方式。快到了,你能分享更多吗?