2015-06-20 87 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中创建自定义模式吗?这意味着我必须先在我的数据库中创建我的外键?然后在我的代码中使用那些? –

相关问题