質問

selectオブジェクトを使用して、多対多の行セットの結果をフィルター処理しようとしています。この呼び出しはうまく機能します:

$articles = $this->model->findArticlesViaArticlesUsers();

ただし、これは次のことを行いません。

$articles = new Default_Model_Articles();
$articleSelect = $articles->select();
$articleSelect->where("status = 'published'")
              ->order("date_published DESC")
              ->limit(1);

$articles = $this->model->findArticlesViaArticlesUsers($articleSelect);

次のエラーがスローされます:

  

例外 'Zend_Db_Select_Exception'   「メッセージを定義できません   相関名「i」を複数回

「公開済み」ステータスの記事を正常に取得する方法がわかりません。マジック多対多リレーションシップ( findManyToManyRowset )を使用します。私はロープの終わりにあり、SQLを手動で書くことを考えています。アイデアはありますか?

役に立ちましたか?

解決

selectステートメントを定義する場合、findManyToManyRowset(または使用する任意のマジック関数)を呼び出すのと同じオブジェクトを使用する必要があります。

例:

$articles = new Default_Model_Articles();
$user = $articles->find($userId)->current();
$select = $user->select();
$select->where('status = ?', 'published');
$articles = $user->findArticlesViaArticlesUsers($select);

selectステートメントとfindArticlesViaArticlesUsersが両方とも$ userを拡張していることに注意してください。それが鍵です。

他のヒント

関係のしくみを誤解していると思います。

このマニュアルページ-Rowオブジェクトで、マジックメソッドfindArticlesViaArticlesUsersを呼び出す必要があります。この場合、ユーザーを見つけて、その上でfindArticles ...を呼び出したいと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top