【问题标题】:two foreign keys, how to map with laravel eloquent两个外键,如何用 laravel eloquent 映射
【发布时间】:2014-09-23 13:30:12
【问题描述】:

我在 MySQL 中有两个表,其中第一个称为 users,第二个称为 games。表结构如下。

用户

  • id(主要)
  • 电子邮件
  • 密码
  • 真实姓名

游戏

  • id(主要)
  • user_one_id(国外)
  • user_one_score
  • user_two_id(国外)
  • user_two_score

我的游戏桌对两个用户有两个对外关系。

我的问题是如何为这个表结构建立模型关系? - 根据the laravel documentation,我应该在模型内部创建一个函数并将其与其关系绑定

例如

public function users()
{
    $this->belongsTo('game');
}

但是我似乎在文档中找不到任何东西告诉我如何处理两个外键。就像我上面的表格结构一样。

我希望你能帮助我。

谢谢

【问题讨论】:

  • 有些答案有用吗?提供反馈。

标签: php mysql sql laravel eloquent


【解决方案1】:

迁移:

$table->integer('player1')->unsigned();
$table->foreign('player1')->references('id')->on('users')->onDelete('cascade');
$table->integer('player2')->unsigned();
$table->foreign('player2')->references('id')->on('users')->onDelete('cascade');

还有一个模型:

public function player1()
{
    $this->belongsTo('Game', 'player1');
}
public function player2()
{
    $this->belongsTo('Game', 'player2');
}

编辑 按照用户 deczo 的建议将“游戏”更改为“游戏”。

【讨论】:

  • 您只需要使用确切的型号名称,可能是Game。否则这将抛出 class game not found 致命错误。
  • 谢谢,据我了解,您只是为表中的每个关系创建一个新的“关系”函数?我没有带我的工作电脑,但我稍后会试试看:)
  • 当然,您可以根据需要命名文件,如果它不遵循命名约定,则必须将名称指定为关系函数中的第二个参数。
【解决方案2】:

不幸的是,您的这种设置方式在当前环境下不太可能奏效。使用 belongsTo 方法可能更幸运,但同样只支持一种关系。

你可以实现一个 user1() belongsTo,一个 user2() belongsTo,最后只声明一个非 eloquent 函数来返回两者(类似于 $users = array($this->user1(), $this->user2( ))

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 2012-04-30
    • 2022-01-16
    • 1970-01-01
    • 2020-04-28
    • 2012-05-12
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多