【问题标题】:how to create a foreign key with custom name in redbeanphp如何在 redbeanphp 中创建具有自定义名称的外键
【发布时间】:2015-06-20 08:01:12
【问题描述】:

我有两个表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 框架中用最喜欢的名字创建自定义外键?

【问题讨论】:

    标签: php mysql redbean


    【解决方案1】:

    通过您的示例,您可以使用aliases 轻松实现与您想要的非常接近的东西(writer_id,而不是 writerId)。

    看到这个sn-p:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这是正确的,这里是 RedBeanPHP 的主要作者。 RedBeanPHP 专注于高速开发和极高的生产力。当然,这是有代价的,您几乎无法控制您的架构。但是,可以只更改外键的名称,RedBeanPHP 能够识别模式自定义并且不会触及它们。
      • 现在你能指导我在 redbean php 中创建自定义模式吗?这意味着我必须首先在我的数据库中创建我的外键?然后在我的代码中使用它们?
      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 2015-06-19
      • 2022-11-30
      • 2012-12-19
      相关资源
      最近更新 更多