データベースに投稿を作成する機能があります。投稿は独自の一意の _id を取得しますが、作成時に、投稿を書いたユーザーの ID である「owner_id」も取得します。
私はすべての公開投稿を完全に表示する関数を持っています。それは次のようになります:
public function getPublicPosts()
{
try
{
return $this->getCollection("posts")->find(array("privacy"=>0));
}
catch(MongoCursorException $e)
{
echo "Posts retrieval failed: ".print_r($e);
}
}
同様に、次のようにユーザーの投稿を取得する関数を作成しました。
public function getUserPosts($user_id)
{
try
{
return $this->getCollection("posts")->find(array("owner_id"=>$user_id));
}
catch(MongoCursorException $e)
{
echo "Posts retrieval failed: ".print_r($e);
}
}
getPublicPosts はまったく問題なく動作します。ただし、ユーザーの _id フィールドと投稿の owner_id フィールドが完全に一致している場合でも、getUserPosts は空の Mongo Cursor オブジェクトを返します。投稿を表示するページで、念のために次のことを行いました。
<?php
foreach($public_posts as $post):
?>
<?php echo $post['owner_id']; ?><br/>
<?php echo $_SESSION['user_id']; ?>
これにより、2 つの投稿に対して次の結果が得られます。
4ffa66f7e3ed570f62000000 4ffa66f7e3ed570f62000000
ですから、ここで何が起こっているのか本当にわかりません。データベースでユーザーのIDを挿入すると、フィールド値に次のように表示されることに気付きました
owner_id {"$oid": "4ffa66f7e3ed570f62000000"}
おそらくこれが問題ですか?公開投稿を表示する際に $posts['owner_id'] にアクセスしても問題なさそうです。owner_id を配列に設定しておらず、単一の値 (ユーザー固有の _id) に設定していないため、なぜこれが起こっているのかわかりません。
どんな助けでも大歓迎です!