cakePHPで問題が見つかりました。私は、クラブモデル、UserモデルとPostモデルを持っている:CakePHP - 関連がある条件を見つける
クラブhasManyのポスト
クラブHABTMユーザー
は基本的に、私のclubs_usersテーブルはまた、このようなのは、「制限」をしましょうと 'などの追加フィールドが含まれています「diff」はそれぞれ、ユーザが表示したい投稿の最大数と、その投稿がどれくらい古いことができるかを示します。私は、特定のユーザーに関連するすべてのクラブに適切な投稿を選択したいと考えています。私はこのようなsometingをしています
$clubs = $this->Club->User->find('first', array(
'conditions' => array('User.id' => $id),
'contain' => array(
'Club' => array(
'fields' => array(
'id',
'name'
),
'Post' => array(
'fields' => array(
'id',
'title',
'description',
'created',
),
'order' => array('Post.created' => 'DESC'),
'conditions' => array(
'DATEDIFF(NOW(), `Post.created`) <= /* 1 */',
),
'limit' => '/* 2 */'
)
)
)
));
私は何のためにこれを動作させるべきですか?私はClubsUser.diffとClubsUser.limitを試しましたが、where句ではこれらのフィールドが不明であるとのエラーが出ました。
何か歓迎致します。
読んでいただきありがとうございます。
編集
bancerさんのコメントの後、私は、MySQLのドキュメントに深く見て、そのLIMITが唯一の数値引数を期待登場。だから私は今、あまりにも古くない投稿を返すだけです。最後のクエリが返す
SELECT * FROM `users` AS `Follower`
WHERE `Follower`.`id` = 1
LIMIT 1
SELECT * FROM `clubs` AS `Club`
JOIN `clubs_users` AS `ClubsUser`
ON (`ClubsUser`.`user_id` = 1 AND `ClubsUser`.`club_id` = `Club`.`id`)
ORDER BY `ClubsUser`.`role_id` DESC
SELECT * FROM `posts` AS `Post`
WHERE DATEDIFF(NOW(), `Post`.`created`) <= `ClubsUser`.`max_time_posts` AND `Post`.`club_id` = (1)
ORDER BY `Post`.`created` DESC
LIMIT 10
:私の新しい発見は、それが3つの以下のSQLクエリを(私は明快さの理由のために*で名前のフィールドを置き換え)を生成し(実際のフィールド名で)
$overview = $this->Club->Follower->find('first', array(
'conditions' => array('Follower.id' => $this->Auth->user('id')),
'contain' => array(
'Club' => array(
'fields' => array(
'id',
'name'
),
'Post' => array(
'fields' => array(
'id',
'title',
'description',
'created',
),
'order' => array('Post.created' => 'DESC'),
'conditions' => array(
'DATEDIFF(NOW(), `Post.created`) <= ClubsUser.max_time_posts',
),
'limit' => 10
)
)
)
));
ですエラー:フィールド「ClubsUser.max_time_posts」未知の句
理想的には、私は上記の代わりに、最後の2つのクエリの下の1に近いクエリを取得したいと思いどこで:
SELECT * FROM `clubs` AS `Club`
JOIN `clubs_users` AS `ClubsUser`
ON (`ClubsUser`.`user_id` = 1 AND `ClubsUser`.`club_id` = `Club`.`id`)
LEFT JOIN `posts` AS `Post`
ON (`Post`.`club_id` = `Club`.`id` AND DATEDIFF(NOW(), `Post`.`created`) <= `ClubsUser`.`max_time_posts`)
ORDER BY `ClubsUser`.`role_id` DESC, `Post`.`created` DESC
LIMIT 10
?デバッグ出力からコピーします。どんなSQLクエリが必要ですか? – bancer
@bancer:私は自分の質問を編集しました –