如何在redbeanphp中创建具有自定义名称的外键

时间:2015-06-20 08:01:12

标签: php mysql redbean

我有两个表usercomment:用户可以将评论发布给其他用户。

我希望从comment表到user表创建两个外键,其中一个包含评论作者user_id,另一个包含评论所有者user_id

我使用此代码:

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

并在我的表(user_id , sharedUser_Id)中创建此列 但我想将sharedUser_Id重命名为writerId ...

我该怎么做?有没有办法在redbeanphp框架中创建具有喜欢名称的自定义forign键?

2 个答案:

答案 0 :(得分:1)

通过您的示例,您可以使用aliases轻松实现您想要的内容(writer_id,而不是writerId)。

请参阅此代码段:

<?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
*/

答案 1 :(得分:0)

我在readbean中找到了我的问题的答案关于页面女巫绝对是。 在this页的最后一节中写了这一段:

  

如果您不喜欢RedBeanPHP架构策略,并且希望完全控制数据库架构的布局,即用于主键和外键的列名,则也不应使用RedBeanPHP。在这种情况下,我建议使用:Doctrine。如果Doctrine对你的品味来说太大了,你也可以考虑一个小小的,活跃的记录,比如我的朋友写的ORM:DicaORM。