【问题标题】:How to use select columns in phalcon Model with relationship如何在具有关系的 phalcon 模型中使用选择列
【发布时间】:2017-03-24 09:39:26
【问题描述】:

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

$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 未定义。

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

【问题讨论】:

  • 正如@nikolay 所说,如果您在查询中指定列,则无法获取相关记录。因为您将返回 Phalcon\Mvc\Model\Row 而不是模型实例。我可以补充一点,指定列实际上比查询整个记录

标签: phalcon phalcon-orm


【解决方案1】:

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

// 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 实例,它们没有您自己已经看到的方法/关系。

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

【讨论】:

  • 我能理解你的解释,但我需要一些可以处理用户对象和表中列选择的东西。
【解决方案2】:

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

或者像这样:

$userData = User::query()
->columns(["User.id", "User.username"])
->innerJoin("UserPhoto")
->execute();

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2018-05-27
      • 2010-11-26
      • 2020-11-15
      相关资源
      最近更新 更多