こんにちは、私は Cakephp を初めて使用し、cakephp 2.3.4 でプロジェクトを行っています。
has many through association を介して、製品の金属クラスを関連付ける必要があります。しかし、それは機能していないようです。
型式コード
class Metal extends AppModel {
public $hasMany = array(
'MetalProduct'
);
}
class Product extends AppModel {
public $hasMany = array(
'MetalProduct'
);
}
App::uses('AppModel', 'Model');
class MetalProduct extends AppModel {
public $belongsTo = array(
'Metal' => array(
'className' => 'Metal',
'foreignKey' => 'metal_id'
),
'Product' => array(
'className' => 'Product',
'foreignKey' => 'product_id'
)
);}
データベースのテーブル名はmetal、products、およびmetal_products です
複数の金属タイプを選択するための複数選択オプションがあります。
これは、金属のリストを取得する方法です
$metals=$this->Metal->find('list');
$this->set(compact('metals'));
リストボックスの FormHelper コードは
<?php echo $this->Form->input('Metal',array('type' => 'select',
'multiple' => true)); ?>
製品は正常に保存されていますが、関連付けは保存されていません。
デバッグ配列は私にこれを与えます
$message = array(
'Product' => array(
'category_id' => '517a514b-0eb0-4ec9-b018-0b948620d4f0',
'name' => 'mangalsutra Diamond',
'slug' => 'mangalsutra_diamond',
'description' => '1212',
'Metal' => array(
(int) 0 => '5183cb65-bf90-459c-b22e-0b748620d4f0',
(int) 1 => '5183ce25-c744-433e-b035-0b748620d4f0'
),
'image' => '121212',
'price' => '12121',
'weight' => '12',
'active' => '1',
'category' => 'Mangalsutra'
)
)
私は頭を壁に突き刺しましたが、なぜ協会が救われないのか見当がつきませんでした。彼らがチュートリアルで言う方法は簡単に思えますが、なぜうまくいかないのでしょうか?
金属配列がこのように渡されるため、保存されないのではないかと疑っています
'Metal' => array(
(int) 0 => '5183cb65-bf90-459c-b22e-0b748620d4f0',
(int) 1 => '5183ce25-c744-433e-b035-0b748620d4f0'
),
(int) 0 などではなく、「id」に言及する必要があります。
また、手動で作成した metal_products のデータベース テーブルには、
id(primary key)
metal_id(foreign key to Metal.id)
product_id(foreign key to Product.id)
命名規則やデータベースの作成方法に何か問題がありますか? 私が他の人から試したものは何でも答えがうまくいかないので、正しい答えを教えてください
経由で保存しています
$this->Product->saveAll($this->request->data, array('deep' => true))