Php 如何将模型A与Laravel中的模型B或模型C关联?
我正在使用Laravel4的Elount来创建三个不同的模型:用户模型、代理模型和执行者模型。任何用户都可以作为普通用户注册,也可以付费成为代理或表演者。因为代理和执行者都有特殊的配置文件,所以我为执行者和代理创建了单独的表,其中将包含他们的配置文件,并且在用户表中只包含一个用户“类型”,它指示他们是普通用户、执行者还是代理 这意味着用户模型将与执行者和代理都有一个has_one关系。因为一个用户只会是其中的一个,我想知道是否有可能让用户模型只与其中的一个相关(或者不相关),这取决于用户的类型 我有一种强烈的感觉,我走错了方向。我是否应该将用户模型与两者联系起来,并在使用关系之前进行检查(这在一开始似乎很明显,但也不是正确的方法)?有更好的方法吗Php 如何将模型A与Laravel中的模型B或模型C关联?,php,laravel,database-schema,eloquent,Php,Laravel,Database Schema,Eloquent,我正在使用Laravel4的Elount来创建三个不同的模型:用户模型、代理模型和执行者模型。任何用户都可以作为普通用户注册,也可以付费成为代理或表演者。因为代理和执行者都有特殊的配置文件,所以我为执行者和代理创建了单独的表,其中将包含他们的配置文件,并且在用户表中只包含一个用户“类型”,它指示他们是普通用户、执行者还是代理 这意味着用户模型将与执行者和代理都有一个has_one关系。因为一个用户只会是其中的一个,我想知道是否有可能让用户模型只与其中的一个相关(或者不相关),这取决于用户的类型
编辑:我在上面指定了用户可能不是这两个用户中的任何一个,而只是一个普通用户,但是我似乎太模糊了:因此,如果用户没有付费成为代理或表演者,他们将只是一个普通用户。在这种情况下,最好的策略是手动为
userable\u type
列填写“user”,并在我执行$user->userable
之前检查以确保它不等于“user”?检查多态关系。这可能正是你所需要的,你已经为它做好了准备。基本上,您将找到您的用户,调用关系,它将返回代理或执行者的实例。哈!我在其他模型中使用多态性,但我甚至没有想到这一个。我真傻。非常感谢!啊,好的,我有一个关于你答案的问题。如果用户是代理或执行者,它就可以工作,但是如果用户只是一个普通用户呢?用户不必是这两种特殊的用户类型中的任何一种。您可能会将用户表变形为自身。我还没有测试过这样做,但我认为它应该工作得很好。
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
}