私はCakePHPの初心者ですが、今は多対多の状況で立ち往生しています
わかりました、私は3つのテーブルを持っています:
- フィールドのある質問 (id、質問)
- フィールドを持つ question_product (id、question_id、product_id、question_number、is_enabled)
- フィールド (id、name、code、is_enabled) を持つ製品
特定のフィールドで質問を選択したい場合、今のところ修正方法がわかりません。コードは次のようになります。
Question.php (モデル)
class Question extends AppModel {
public $hasAndBelongsToMany = array (
'Product' => array (
'joinTable' => 'question_product',
'foreignKey' => 'question_id',
'associationForeignKey' => 'product_id',
'unique' => 'keepExisting',
'order' => 'question_number',
'fields' => array (
'QuestionProduct.question_number',
'Product.id',
'Product.name'
),
'conditions' => array (
'QuestionProduct.is_enabled' => 1,
)
)
);
}
QuestionsController.php (コントローラー)
public function loadQuestions($productId) {
$this->view = 'load_questions';
$questions = $this->Question->find('all', array (
'fields' => array (
'Question.id',
'Question.question',
'Question.is_optional',
'Question.reason_optional',
'Question.text_size'
),
'conditions' => array (
'QuestionProduct.product_id' => $productId
)
));
$this->set($questions);
}
メソッド loadQuestions には、指定された製品で選択する 1 つのパラメータがあります
SQLクエリを使用すると、次のようになります
条件 Product.product_id=4 の質問からすべて選択し、QuestionProduct.question_number の昇順で並べ替えます
select questions.*
from questions
join question_product on questions.id=question_product.question_id
join products on products.id=question_product.product_id
where products.id=4
order by question_product.question_number;
どんな答えでも大歓迎です:)
ありがとう !