Laravel与多个联接列的雄辩关系

Laravel与多个联接列的雄辩关系,laravel,eloquent,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

我对拉雷维尔不熟悉,我试着用雄辩的语言。 假设存在以下数据库结构:

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包含a,其中p.userid=a.userid和p.aid=a.aid


如何处理与多个列的关系?

首先,我想指出,如果找不到直接的解决方案,总会有解决办法。无法与一个表中的多个列建立关系的原因是,在另一个表中需要相同数量的列。因此,如果在第一个表中有两列类型为
int
,那么在第二个表中也需要两列类型为
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车型中使用了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模型中也是如此

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取决于您的数据库模型,取决于您如何定义数据库。

我尝试使用hasMany,但似乎只能为外键参数添加一列。我认为您完全搞乱了数据结构。。。a的主键是userid和aid。aid仅对每个用户ID是唯一的。表p也一样。除了userid之外,您没有从表p到a的引用。但是p中的每个条目都引用到a中的一个条目。p中的条目属于a中的条目,其中p.userid=a.userid和p.aid=a.aid。重新声明函数a(或p)也不起作用