【问题标题】:yii search in double primary key tableyii在双主键表中搜索
【发布时间】:2014-07-02 15:18:05
【问题描述】:

我必须验证表中是否存在具有双主键的记录。

$ssd=Ssd::model()->find(array(
                                'condition' => "id_scaglione=:sca AND COD_FIS LIKE :cf",
                                'params' => array(
                                                ':sca' => $sca_attivo->attributes['ID_SCAGLIONE'],
                                                ':cf' => $codfisc
                                            )
                            ));

但我有一个“为 foreach() 提供的参数无效”错误。

我认为是模型中声明关系的问题...

我在搜索主键时遇到同样的错误

$ssd = Scaglioni::model()->findByPk($sca_attivo->attributes['ID_SCAGLIONE'], $codfisc);

使用 Ssd 模型的覆盖方法:

public function primaryKey(){
    return array('ID_SCAGLIONE', 'COD_FIS');
}

这里是模型的关系:

斯卡廖尼

class Scaglioni extends CActiveRecord{
public function relations()
    {
        return array(
            'ssd' => array(self::HAS_MANY, 'Ssd', 'ID_SCAGLIONE'),
        );
    }
}

学生

class Studenti extends CActiveRecord{
public function relations()
    {
        return array(
            'ssd' => array(self::HAS_MANY, 'Ssd', 'COD_FIS'),
            'scaglioni' => array(self::HAS_MANY, 'Scaglioni', array('ID_SCAGLIONE'=>'ID_SCAGLIONE'), 'through'=>'ssd'),

        );
    }
    }

固态硬盘

class Ssd extends CActiveRecord{
public function relations()
    {
        return array(               
            'scaglioni' => array(self::BELONGS_TO, 'Scaglioni', 'ID_SCAGLIONE'),
            'studenti' => array(self::BELONGS_TO, 'Studenti', 'COD_FIS'),
        );
    }
}

【问题讨论】:

  • 如果您有一个多列 PK,您需要使用数组指定它们。您的 findByPk 调用肯定不会像您在此处发布的那样工作。
  • 好的,Ssd::model()->findByPk 错误,我如何指定多列数组?我在模型中有“public function primaryKey(){return array('ID_SCAGLIONE', 'COD_FIS');}”。除此之外,为什么 Ssd::model()->find 不起作用?
  • 如果没有至少一个代码位置,这很难诊断...该错误几乎是由每个 foreach 循环引起的。
  • 我认为是从 Ssd::model()->find(...) 查询生成的,因为如果我评论它就可以正常工作。
  • 可能是的,但我们需要知道它在 Yii 代码中的哪个地方失败了。您的日志(或输出)中应该有一个很好的堆栈跟踪

标签: php yii foreach invalid-argument


【解决方案1】:

在 Ssd::model()->find(...) 后失败,并出现“为 foreach() 提供的参数无效”错误。

特别是:

/var/www/framework/db/schema/CDbCriteria.php(152)
 public function __construct($data=array())
{
foreach($data as $name=>$value)
$this->$name=$value;
}

堆栈跟踪是:

0 /var/www/framework/db/ar/CActiveRecord.php(316): CDbCriteria->__construct(null)

1 /var/www/framework/db/ar/CActiveRecord.php(1338): CActiveRecord->getDbCriteria(false)

2 /var/www/framework/db/ar/CActiveRecord.php(1281): CActiveRecord->applyScopes(CDbCriteria)

3 /var/www/framework/db/ar/CActiveRecord.php(1392): CActiveRecord->query(CDbCriteria)

4 /var/www/concorsi/protected/controllers/ConfermaController.php(405): CActiveRecord->find(array("condition" => "id_scaglione=:sca AND COD_FIS LIKE :cf", "params" = > 数组(":sca" => $sca_attivo->attributes['ID_SCAGLIONE'], ":cf" => $codfisc)))

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多