好吧,這是很難解釋,但我會盡我所能。cakePHP通過關係綁定hasmany
我有3個表
companies products product_availabilities
--------- -------- ----------------------
id id id
name name company_id
product_id
buys (tinyint)
sells (tinyint)
而且他們的模型
class Company extends AppModel
{
public $name = 'Company';
public $hasMany = array(
'ProductAvailability'
);
class Product extends AppModel
{
public $name = 'Product';
public $hasMany = array(
'ProductAvailability'
);
class ProductAvailability extends AppModel
{
public $name = 'ProductAvailability';
public $belongsTo = array(
'Company',
'Product'
);
}
我想要做的是,當我創建一個公司,我希望能夠選擇,該公司購買產品或銷售。我在書中看到了一個hasMany through關係的例子(http://book.cakephp.org/1.3/view/1650/hasMany-through-The-Join-Model),但他們正在從「連接表「控制器。是否有可能將productAvailability模型綁定到我的公司模型上,以便能夠在創建公司時選擇產品?
編輯:這是我做到的。我知道這不是最佳的,因爲涉及到很多循環,但它很有用。
公司負責人:
$products = $this->Company->ProductAvailability->Product->find('list', array('fields' => array('Product.id', 'Product.label')));
$this->set('products', $products);
if($this->request->is('post')){
if($this->Company->save($this->request->data)){
foreach($products as $product)
{
$tmpArray = array(
'company_id' => $this->Company->id,
'product_id' => $product['Product']['id']
);
foreach($this->request->data('BuyProducts.product_id') as $buyProduct)
{
if($buyProduct == $product['Product']['id'])
$tmpArray['buys'] = 1;
}
foreach($this->request->data('SellProducts.product_id') as $sellProduct)
{
if($sellProduct == $product['Product']['id'])
$tmpArray['sells'] = 1;
}
if(count($tmpArray) > 2)
{
$this->Company->ProductAvailability->create();
$this->Company->ProductAvailability->set($tmpArray);
$this->Company->ProductAvailability->save();
}
}
$this->Session->setFlash('Yay', 'success');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Nay', 'error');
}
}
公司地址形式:
<?php echo $this->Form->create('Company'); ?>
<?php echo $this->Form->input('name', array('div' => 'full-form')); ?>
<?php echo $this->Form->input('BuyProducts.product_id', array('multiple' => 'checkbox', 'options' => $products, 'div' => 'full-form', 'label' => false)); ?>
<?php echo $this->Form->input('SellProducts.product_id', array('multiple' => 'checkbox', 'options' => $products, 'div' => 'full-form', 'label' => false)); ?>
<?php echo $this->Form->end(array('label' => __('Save'), 'div' => 'center', 'class' => 'bouton-vert')); ?>
謝謝你的回答。不幸的是,hasAndBelongsToMany不適用於我的情況,因爲我想將數據保存在連接表中。一些公司會購買產品,而另一些公司則會出售它們,或者兩者都有。 – 2012-07-25 13:48:25
多米尼克,我對它進行了更新,以便您可以將數據包含在連接表中。 – 2012-07-25 13:52:45
我的問題是我似乎無法建立一個表格,將張貼正確的結構來保存這些數據。我必須在創建公司時保存所有這些數據。 – 2012-07-25 13:55:04