【问题标题】:Passing variables to a has_one relationship in PhpActiveRecord将变量传递给 PhpActiveRecord 中的 has_one 关系
【发布时间】:2013-03-26 23:36:07
【问题描述】:

我在一个项目中使用 phpactiverecord (http://www.phpactiverecord.org/)。

我定义了以下关系。有没有办法将变量传递给它,以便我可以即时更改language_id

static $has_one = array(
  array(
    'language', 
    'class_name' => 'Pages_lang', 
    'conditions' => array('language_id=1')
  )
);

我查看了文档,看来您可以做到:

static $has_one = array(
  array('language', 
    'class_name' => 
    'Pages_lang', 
    'conditions' => array('language_id=?','1'))
);

但是传入一个变量:

static $has_one = array(
  array('language', 
    'class_name' => 
    'Pages_lang', 
    'conditions' => array('language_id=?',$language_id))
);

抛出错误。

我不确定我哪里出错了。

【问题讨论】:

  • 您能否添加更多关于您想要实现的目标的信息?数据库连接存在或不存在,我不明白为什么要即时更改连接。你的数据库模式看起来如何,你想在这里做什么? (请用新信息编辑问题,不要将架构添加为评论:))

标签: php mysql orm phpactiverecord


【解决方案1】:

static 变量仅在对象的上下文中才有意义。它们在实际创建(实例化)该类型的对象之前就已经存在。

我不完全确定您要在这里实现什么,但您很可能希望在程序控制流中的某个时刻更改该变量。为此,您必须在类中创建并调用设置该静态变量值的方法(建议,请参见下面的示例代码)或从主代码中显式设置它(不建议,还需要您的变量是public)

class Foo
{
    static $has_one = 'initial value';

    public static function setHasOne($value) {
        self::$has_one=$value;
    }
}

// main code:
Foo::setHasOne('new value');

为了简单起见,我在这里使用了一个字符串变量,但它与数组的工作方式相同。

【讨论】:

  • 我不知道你在哪里得到这个建议,但$has_one 是你使用的对象,它由phpactiverecord 在模型对象中定义。我看不出该 setHasONE 函数有任何优点,因为它应该与您的数据库相关联!
  • 我在这里给出的答案只是试图展示 PHP 中静态变量的概念。我不知道 $has_one 在 phpactiverecord 中做了什么,也不知道在您自己的代码中设置该变量是否有意义。 (这也是我给班级打电话Foo的原因)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 2020-01-24
  • 2018-10-04
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多