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

时间:2015-07-11 19:43:49

标签: 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,
  `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

如何与多个专栏建立关系?

1 个答案:

答案 0 :(得分:0)

首先,我想提一下,如果找不到直接解决方案,总会有一种解决方法。您无法在一个表中与多个列建立关系的原因是您需要在另一个表中使用相同数量的列。因此,如果第一个表中有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由您的数据库模型决定,关于您如何定义数据库。