2015-06-20 125 views
0

我有兩個表usercomment:用戶可以向其他用戶發表評論。如何使用redbeanphp中的自定義名稱創建外鍵

我想從comment表創建兩個外鍵user表女巫一個包含評論作家user_id,另一個包含註釋所有者user_id

我用這個代碼:

$agent->link($TB_Comment,array("comment"=>$comment, "indate"=> time()))->sharedUsers = $user ; 

,並在我的表(user_id , sharedUser_Id) 創建此列,但我要重新命名sharedUser_IdwriterId ...

我怎樣才能做到這一點?有沒有辦法在redbeanphp框架中創建具有最喜歡名稱的自定義forign鍵?

回答

1

用你的例子,你可以實現非常接近的東西(writer_id,而不是writerId),你可以很容易地使用aliases

看到這個片斷:

<?php 

require 'rb.php'; // rb 4.2.4 (for the record) 

R::setup(); 

list($owner, $writer) = R::dispenseAll('user*2')[0]; 

$owner->name = 'Owner'; 
$writer->name = 'Writer'; 

R::storeAll([$owner, $writer]); 

$comment = R::dispense('comment'); 
$comment->user = $owner; 
$comment->writer = $writer; 

$commentId = R::store($comment); 

// Schema with user_id & writer_id: 
print_r(R::load('comment', $commentId)->export()); 
/* 
Array 
(
    [id] => 4 
    [user_id] => 7 
    [writer_id] => 8 
) 
*/ 

// This fails: 
$comment = R::load('comment', $commentId); 
echo $comment->writer->name . ' => ' . $comment->user->name . "\n"; 
/* 
=> Owner 
*/ 

// But, using aliases, this works: 
$comment = R::load('comment', $commentId); 
echo $comment->fetchAs('user')->writer->name . ' => ' . $comment->user->name . "\n"; 
/* 
Writer => Owner 
*/ 

// Or, using aliases & magic: 
R::setAutoResolve(true); // magic! 
$comment = R::load('comment', $commentId); 
echo $comment->writer->name . ' => ' . $comment->user->name . "\n"; 
/* 
Writer => Owner 
*/ 
+0

你讓我的一天感謝你 –

0

我找到了我的問題在readbean關於頁面女巫的答案絕對是不是。 在最後一節this頁的這一段寫着:

你也不應使用RedBeanPHP,如果你不喜歡RedBeanPHP架構策略和您想要對數據庫架構的佈局完全控制,即列用於主鍵和外鍵的名稱。在這種情況下,我建議使用:教義。如果學說對您的口味太大,您可能還會考慮像我的朋友寫的ORM這樣的小型活躍記錄:DicaORM。

+1

這是RedBeanPHP這裏是正確的,主要作者。 RedBeanPHP專注於高速發展和極高的生產力。這當然是有代價的,你對模式的控制很少。但是,可以更改外鍵的名稱,RedBeanPHP能夠識別架構自定義並且不會觸及它們。 –

+0

現在你可以指導我在redbean php中創建自定義模式嗎?這意味着我必須先在我的數據庫中創建我的外鍵?然後在我的代碼中使用那些? –

相關問題