Cakephp で適切にクエリを実行するのに問題があります。Cake がテーブルの 1 つで存在しない列を見つけようとしていますが、その理由がわかりません。これには 2 つのテーブルがあります。投票と投稿。ユーザーは投稿に投票できます。
ここにテーブルがあります
Table votes
post_id | user_id | vote
table posts
post_id | tite | body | created | modified | user_id | vote_total
ユーザーが投稿に投票すると、その投票は投票テーブルに配置され、vote_total は投票によって増減します。
投稿のインデックスでは、ユーザーはこれら 2 つのリンクから投稿に投票できます。現在、一方を機能させるためだけに両方を同じ関数に送信しました。その後、もう一方を終了します
<td><?php echo $this->Html->link('Upvote', array('action' => 'vote', $post['Post']['id']))?>
<?php echo $this->Html->link('Downvote', array('action' => 'Downvote', $post['Post']['id']));?></td>
投稿を表示する index.ctp を表示すると、次のエラーが表示されます
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Post.id' in 'field list'
これが実行しているクエリです
SQL Query: SELECT `Post`.`post_id`, `Post`.`title`, `Post`.`body`, `Post`.`created`, `Post`.`modified`, `Post`.`user_id`, `Post`.`vote_total`, `Post`.`id` FROM `blog`.`posts` AS `Post` WHERE 1 = 1
だから、私の問題は、 Post.id がどこからクエリされているのかわからないことです。関数とモデルを検索してきましたが、何が起こっているのかわかりません。
これが私のpostcontroller関数です
public function vote($id=null){
$this->layout = 'votes_layout';
$this->Post->Votes->recursive = 0;
$this->Post->id = $id;
$user = $this->Auth->User();
$userid = $user['id'];
$conditions = array('votes.id' => $id, 'votes.user_id' => $userid);
$data = $this->Post->Votes->find('all', array('conditions' => $conditions));
if (isset($data) && !empty($data)) {
echo '<p>User have already give a vote!</p>';
} else {
if($this->Post->Votes->validates()){
if ($this->Post->Votes->save($this->request->data)) {
$this->Session->setFlash(__('The vote has been saved'));
$this->redirect(array('action' => 'vote'));
} else {
$this->Session->setFlash(__('The vote could not be saved. Please, try again.'));
}
}
}
}
これは私の投稿モデルにあります
public $hasMany = array(
'Votes' => array(
'className' => 'Vote',
)
);
それで、私の質問は、ケーキがpost.idを照会する原因となっているのは何ですか? それは私のテーブルの列ではなく、クエリがどこから来ているのかわかりません。
編集
Posts モデルで投票の hasMany 関係を削除すると、クエリ エラーはなくなりますが、テーブル内のすべての投稿フィールドを参照する次のエラーが発生します。
Undefined index: id
これはハズマン関係ではありませんか?各投稿には多くの投票がありますが、各ユーザーは投稿ごとに 1 票しかありません。