【问题标题】:Laravel Eloquent relationship with more than one join columnLaravel Eloquent 与多个连接列的关系
【发布时间】:2015-07-12 05:08:10
【问题描述】:

我是 laravel 新手,尝试使用 Eloquent。 假设有如下数据库结构:

CREATE TABLE `a` (
  `userid` int(11) NOT NULL,
  `aid` int(11) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `p` (
  `userid` int(11) NOT NULL,
  `pid` int(11) NOT NULL,
  `aid` int(11) NOT NULL,
  `text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `a` ADD PRIMARY KEY (`userid`,`aid`);
ALTER TABLE `p` ADD PRIMARY KEY (`userid`,`pid`);

现在我想要表之间的关系:

p 包含一个 p.userid=a.userid AND p.aid=a.aid

如何与多个列建立关系?

【问题讨论】:

  • 我尝试了hasmany,但似乎只能为foreign_key参数添加一列。

标签: laravel eloquent


【解决方案1】:

首先我想提一下,如果您找不到直接的解决方案,总有一种解决方法。您不能与一个表中的多个列建立关系的原因是您需要另一个表中的列数相同。因此,如果您在第一个表中有 2 个 int 类型的列,则在第二个表中还需要 2 个 int 类型的列来链接它们。正如我从您提供的内容中看到的那样,您重复的数据表明您的数据库未标准化。我建议您执行以下操作:

CREATE TABLE `a` (
    `userid` int(11) NOT NULL,
    `aid` int(11) NOT NULL unique,
    `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `p` (
    `id` int(11) NOT NULL,
    `userid` int(11) NOT NULL,
    `pid` int(11) NOT NULL unique,
    `text` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `a` ADD PRIMARY KEY (`userid`);
ALTER TABLE `p` ADD PRIMARY KEY (`id`);
ALTER TABLE `p` ADD FOREIGN KEY (`userid`) REFERENCES `a` (`userid`) 

这是我认为更适合你的。但是要回答您的问题,因为您在 a model 中使用 laravel,请执行以下操作:

class A extends Eloquent{
    public function p(){
        return $this->belongsTo('App\P','userid') 
       // or hasMany
    }
    public function p(){
        return $this->belongsTo('App\P','aid') 
        // or hasMany
    }
}

p model中的一样

class P extends Eloquent{
    public function a(){
        return $this->hasMany('App\A','userid') 
        //or belongsTO
    }
    public function a(){
        return $this->hasMany('App\A','pid') 
       //or belongsTO
    }
}

注意

记住,belongsTo 或 hasMany 方法取决于您的数据库模型,以及您定义数据库的方式。

【讨论】:

  • 我认为你完全搞砸了数据结构...... a 的主键是用户 ID 和帮助。援助仅对每个用户标识都是唯一的。与表 p 相同。除了用户标识之外,您没有从表 p 到 a 的引用。但是 p 中的每个条目都引用了 a 中的一个条目。 p 中的条目属于 a 中的条目,其中 p.userid=a.userid AND p.aid = a.aid。重新声明函数 a(或 p)也不起作用
猜你喜欢
  • 1970-01-01
  • 2019-09-24
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多