Zend_Db_Table_Selectを使用したfindManyToManyRowset
-
05-07-2019 - |
質問
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 ...を呼び出したいと思います。
所属していません StackOverflow