0

我正在使用 Laravel 4 的 Eloquent 制作三个不同的模型:用户模型、代理模型和执行者模型。任何用户都可以注册为普通用户,也可以付费成为代理或表演者。因为代理和表演者都有特殊的配置文件,我为表演者和代理创建了单独的表,其中将包含他们的配置文件,并且在用户表中只有一个用户“类型”,这表明他们是否是普通用户,表演者,或代理。

这意味着 User 模型将与 Performer 和 Agent 都具有 has_one 关系。因为用户只会是其中之一,所以我想知道是否可以让 User 模型仅与其中一个(或没有)相关,具体取决于用户的类型?

我有一种强烈的感觉,我要走错路了。我是否应该将 User 模型与两者联系起来,并在使用关系之前进行检查(起初这似乎很明显,但也不是完全正确的方法)?有一个更好的方法吗?

编辑:我在上面指定了用户可能不是其中任何一个,而只是普通用户,但似乎我太含糊了:所以,如果用户没有付费成为代理人或表演者,他们只会做一个普通用户。在这种情况下,最好的策略是手动填写userable_type列的“用户”并在我做之前检查以确保它不等于“用户”$user->userable吗?

4

1 回答 1

1
Schema::create('users', function($table)
{
    $table->increments('id');
    $table->string('username');
    $table->string('imageable_type');  // Will be a string of the class name Agent or Performer
    $table->string('imageable_id');    // Will be the ID of the Agent or Performer.
});

class User extends Eloquent
{
    public function imageable()
    {
        return $this->morphTo();
    }
}

class Agent extends Eloquent
{
    public function user()
    {
        return $this->morphMany('User', 'imageable');
    }
}

class Performer extends Eloquent
{
    public function user()
    {
        return $this->morphMany('User', 'imageable');
    }
}

$user = User::find(1);
$type = $user->imageable;  // Type will be either an instance of Agent or Performer

if($type instanceof Agent)
{
    // Do agent stuff
} else {
    // Do performer stuff
}
于 2013-10-14T13:11:23.060 回答