![](/img/trans.png)
[英]Can PDO::FETCH_CLASS mode be used for one row (not fetchAll)?
[英]PHP PDO fetchAll, PDO::FETCH_CLASS and joins
我在以下代碼中遇到問題:
$query = 'SELECT user.id as id, pet.name as name FROM user
LEFT JOIN pet on pet.user_id = user.id
WHERE user.id = 15';
$result = $pdo->query($query);
此代碼將生成類似於此的內容:
***************
| id | name |
***************
| 1 | Mikey |
***************
| 1 | Stewie |
***************
| 1 | Jessy |
***************
現在,我想使用PDO::FETCH_CLASS
來獲取一個對象。 但是,至少對我來說,這種方法只適用於簡單的SELECT
語句。 當你有一個join語句時,它將獲取一個類中的所有內容。 換一種說法:
$user = $result->fetchAll(PDO::FETCH_CLASS, 'User');
echo $user->name; // this will print the pet name (which is weird)
因此,我想要有類似的東西:
$pets = $user->pets; // an array holding Pet Objects
foreach ($pets as $pet)
echo $pet->name . "-";
這將產生:
Mikey - Stewie - Jessy -
我怎樣才能做到這一點?
我開源了一個非常小的函數,它將聯接的結果轉換為層次結構。 如果您只需要這個小功能,這可以避免使用繁重的ORM。 https://github.com/afilina/nestedsql
你會給它一個這樣的聲明:
SELECT album.id AS albums__id, photo.id AS albums__photos__id
FROM album
LEFT JOIN photo ON photo.album_id = album.id;
它會產生這樣的東西:
stdClass Object
(
[albums] => Array
(
[1] => stdClass Object
(
[id] => 1
[photos] => Array
(
[1] => stdClass Object
(
[id] => 1
)
)
)
)
)
(可選)您可以用自己的類替換stdClass。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.