Activerecord Yii CGridview-搜索/排序工作正常,但值不';t显示在各个单元格上
我对Yii CGridView的问题感到半失望,任何帮助或指导都将不胜感激 我有两个相关的表shop(shop_id primary)和contacts(shop_id foreign),这样一个店铺可能有多个联系人。我使用CGridview来提取记录和排序,我在shops模型中的关系函数类似于: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'); 在店铺网格上,我需要显示包含任何一个可用联系人的店铺行。
'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”]”
,但我确定这不是应该做的方式。快到了,你能分享更多吗?