我的模型名为 User
和 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
是未定义的。
有什么办法可以在查找查询中提到列和关系?
的默认行为,你不能。这就是为什么。
// 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实例,而Row实例没有你自己看到的methodsrelations。
有一种方法可以实现它,但需要额外的努力,我不确定这是否值得。你可以阅读更多 本论坛主题 并按照提供的链接。
据我所知,这是不可能的.关系有所有的列。为什么不呢?
或者像这样。
$userData = User::query()
->columns(["User.id", "User.username"])
->innerJoin("UserPhoto")
->execute();
你可以在foreach中取消设置你不想使用的列。