Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 ActiveRecord中获取作为模型实例的属性值?_Php_Activerecord_Phpactiverecord - Fatal编程技术网

如何在PHP ActiveRecord中获取作为模型实例的属性值?

如何在PHP ActiveRecord中获取作为模型实例的属性值?,php,activerecord,phpactiverecord,Php,Activerecord,Phpactiverecord,我正在尝试实现一些应该很简单但在PHP ActiveRecord中似乎不可能实现的东西 在我创建的简化示例中,我有两个模型,Person和Exchange,以及两个表,people(id,name)和Exchange(id,user\u from\u id,user\u to\u id,comment)交换。用户\u从\u id和交换。用户\u到\u id具有引用人员.id的外键约束 因此,当我运行以下代码时: $exchange = Exchange::first(); echo $excha

我正在尝试实现一些应该很简单但在PHP ActiveRecord中似乎不可能实现的东西

在我创建的简化示例中,我有两个模型,Person和Exchange,以及两个表,
people(id,name)
Exchange(id,user\u from\u id,user\u to\u id,comment)
<代码>交换。用户\u从\u id和
交换。用户\u到\u id
具有引用
人员.id
的外键约束

因此,当我运行以下代码时:

$exchange = Exchange::first();
echo $exchange->user_from_id;
echo $exchange->user_from_id->name;
我希望第一个
echo
失败,第二个成功。相反,第一个成功并从_id打印
exchange.user_的一般值,然后第二个显然会生成“尝试获取非对象的属性”警告

无论是否向Exchange添加以下内容,结果都是相同的:

static $belongs_to = array(
    array('user_from_id', 'class_name' => 'Person'),
    array('user_to_id', 'class_name' => 'Person')
);
static $belongs_to = array(
    array('user_from',
          'class_name' => 'Person',
          'foreign_key' => 'user_from_id'),
    array('user_to',
          'class_name' => 'Person',
          'foreign_key' => 'user_to_id')
);

我应该在代码中做些什么更改,以便
$exchange->user\u from\u id
返回Person类的一个实例?

事实证明我误解了下面的操作。我认为它以某种方式将一个模型的属性(对应于一个属性)绑定到另一个模型,但我现在意识到它创建了一个新属性,然后您必须使用
外键
选项将其与属性明确关联

具体地说,这就是我必须添加到交换中的内容:

static $belongs_to = array(
    array('user_from_id', 'class_name' => 'Person'),
    array('user_to_id', 'class_name' => 'Person')
);
static $belongs_to = array(
    array('user_from',
          'class_name' => 'Person',
          'foreign_key' => 'user_from_id'),
    array('user_to',
          'class_name' => 'Person',
          'foreign_key' => 'user_to_id')
);
然后,使用此代码:

$exchange = Exchange::first();
echo $exchange->user_from;
echo $exchange->user_from->name;
我终于得到了我所期望的:第一个
echo
和第二个打印
people.name
where
people.id=exchange.user\u from\u id
时出现了致命错误

这也使得使用两个
对象的即时加载成为可能:

$exchange = Exchange::first(array('include' => array('user_from', 'user_to')));