普通模型的多个1对1关系

时间:2013-12-04 07:21:51

标签: orm laravel-4 relational-database foreign-key-relationship eloquent

我正在使用Laravel 4构建应用程序并使用Eloquent作为ORM。

我认为描述我的问题最简单的方法是举个例子,虽然不太可能......

我有一个Cookie模型(如OREO等)。 Cookie可以反过来属于人类或外星人。所以......

是否可以(正确)说:

Cookie属于Human

AND

Cookie属于Alien?

同一个Cookie不能属于人类和外星人,也不属于同一物种的成员。

所以我想我真正要问的是,Cookie表有两个外键列,一个用于人类,一个用于外星人吗?

提前感谢您的建议。

1 个答案:

答案 0 :(得分:1)

你可以拥有:

name       type   nullable
------------------------------
id         int    no
name       text   no
human_id   int    yes 
alien_id   int    yes

那些可能是你的课程:

class Cookie extends Eloquent {

    public function human()
    {
        return $this->belongsTo('Human', 'human_id');
    }

    public function alien()
    {
        return $this->belongsTo('Alien', 'alien_id');
    }

}

class Alien extends Eloquent {

    public function cookie()
    {
        return $this->hasOne('Cookie', 'alien_id');
    }

}

class Human extends Eloquent {

    public function cookie()
    {
        return $this->hasOne('Cookie', 'human_id');
    }

}

然后你可以这样使用它们:

$human = Human::find(1);

echo $human->cookie->name;

$cookie = Cookie::find(1);

if ($cookie->human) echo $cookie->human->name;
if ($cookie->alien) echo $cookie->alien->name;