2017-03-24 55 views
0

我已經型號命名UserUserPhoto,這是在一個用戶相關的許多用戶照片如何爾康型號使用select列有關係

$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是不確定的。

有什麼辦法可以在find查詢中提及列以及關係嗎?

+1

作爲@nikolay說,這是不可能的,如果你在查詢中指定的列來獲取相關記錄。因爲您將返回一個'Phalcon \ Mvc \ Model \ Row'而不是一個模型實例。我可以補充說,指定列實際上是_slower_而不僅僅是查詢整個記錄 – Timothy

回答

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" 

正如你可以看到上面指定的列不返回模型實例,但行的情況下,不具有方法/關係因爲你已經看到了自己。

有辦法實現它,但需要一些額外的努力,我不確定它是否值得。您可以在this forum topic中閱讀更多內容,並按照提供的鏈接進行操作。

+0

我可以理解你已經解釋了什麼,但是我需要一些能夠處理用戶對象和從表中選擇列的東西。 –

0

據我所知,這是不可能的。 關係包含所有列。爲什麼不 ?

或像這樣:

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