2013-03-26 71 views
1

我正在部分基於CakePHP和使用RedBeanPHP構建自定義MVC框架。PHP MVC模型和RedBeanPHP - 關聯

現在我正在創建DB CRUD的一部分。這是我的想法:

class Model extends RedBean_SimpleModel { 

} 


class Product extends Model { 

var $beans = array(
'name', 
'price', 
... 
); 
} 

這似乎是一個好方法,使RedBeanPHP動態生成表「產品」和列。

現在我目前的疑問(因爲我開始工作和理解RedBeanPHP)的問題是協會。

我真的很喜歡CakePHP's方法,以「hasOne」,「的hasMany」,「屬於關聯」等

可有人指導我這樣做的,但與RedBeanPHP的方法嗎?

回答

0

您可以與redbean建立關係。

$child->parent=$parentBean; // parent relationship 
$child->ownToy=array($toybean1,$toybean2); // 1 to many relationship 
$child->sharedToy=array($toybean1,$toybean2); // many to many relationship 

所以現在的問題是,你將如何實現這一點?你可以有這樣的事情:

var $relations=array(
    'fieldname'=>array('hasMany','names') 
); 

然後,當你處理保存,只是確保你所呼叫的正確功能:

if(array_key_exists('fieldname',$this->relations)){ 
//magic happens 
} 

希望得到您在正確的方向。

+0

謝謝Tim的回答。當然,這讓我更好地理解RedBeanPHP中協會的工作方式。 – sergiodlopes 2013-03-27 12:33:41

1

沒有必要使用RedBeanPHP的前期模型。 RedBeanPHP可以使用名爲FUSE的系統爲您自動連接您的bean。 這節省了很多代碼。而且......更少的代碼==更少的錯誤

$p = R::dispense('product'); 
$p->price = -6; //not a valid price 
R::store($p); 

以後要添加驗證和你寫的:

class Model_Product extends RedBean_SimpleModel { 
    public function update() { 
     if ($this->price < 0) throw new Exception('Price cant be negative!'); 
    ...} 
} 

RedBeanPHP將連接產品豆$ P與模型Model_Product在你的領域模型。您還可以添加新的方法和使用bean打電話給他們:

$p->play(); //-- will call play() on Model_Product 

瞭解更多關於保險絲:

http://www.redbeanphp.com/how_fuse_works

希望這有助於。

+0

感謝您使用RedBeanPHP和您的答案。我更新了問題中的代碼,以更好地反映我擁有的(FUSE)。立即創建列和表以及相應列會帶來問題,即[冷啓動](https://en.wikipedia.org/wiki/Cold_start)。這意味着我將不得不創建PHP代碼(模型)來準備創建不存在的表,列和關聯。 – sergiodlopes 2013-03-28 13:42:39