0

我有一个名为Userand的模型UserPhoto,它在一个用户中与多张用户照片相关

$this->hasMany("id", "UserPhoto", "user_id");
$this->belongsTo("user_id", "User", "id");

如果我尝试

$userData = User::find();

foreach ($userData as $user) {
    $userPhotoAry = $user->UserPhoto;
}

我正在获取关系结果集,但我只需要从表中选择列。

所以我尝试了这个,

$userData = User::find(array("columns"=>"id,username"));

foreach ($userData as $user) {
    $userPhotoAry = $user->UserPhoto;
}

我得到$UserPhoto的是未定义的。

有没有办法在查找查询中提及列以及关系?

4

3 回答 3

0

使用默认行为你不能。原因如下:

// Specifying columns
$userData = User::find(array("columns"=>"id,username"));
var_dump(get_class($userData[0])); // "Phalcon\Mvc\Model\Row"

// Selecting whole objects
$userData = User::find();
var_dump(get_class($userData[0])); // "Users"

正如您在上面看到的,指定列不会返回 Model 实例,而是 Row 实例,它们没有您自己已经看到的方法/关系。

有一种方法可以实现它,但需要一些额外的努力,我不确定它是否值得。您可以在此论坛主题中阅读更多内容并点击提供的链接。

于 2017-03-24T10:13:59.140 回答
0

您可以取消设置您不想在 foreach 中使用的列

于 2020-05-04T13:09:54.327 回答
0

据我所知,这是不可能的。关系具有所有列。为什么不 ?

或像这样:

$userData = User::query()
->columns(["User.id", "User.username"])
->innerJoin("UserPhoto")
->execute();
于 2017-04-10T20:33:44.200 回答