拉拉威尔有一个条件关系


Laravel hasOne conditional relationship

我有一个用户模型,每个用户都有一个内部或外部类型。内部用户和外部用户上存储的数据非常不同,因此有单独的UserInternal和UserExternal模型。

我如何定义这种关系?UserInternal和UserExternal表中有一个键"user_id",每个用户在其中一个表中都有一个匹配的行。

当我检索用户数据时,它总是通过用户模型,但我需要扩展数据。

我该怎么做呢?我尝试过这个,但它并不总是有效(例如,如果我尝试User::with('data') -> find(1),它就不起作用,因为$this还没有设置。

在用户模型内:

public function data()
{
    if( $this -> type === 'internal' )
    {
        return $this -> hasOne('UserInternal');
    }
    else
    {
        return $this -> hasOne('UserExternal');
    }
}

获取用户后尝试加载关系:

$user = User::find(1);
if( ! is_null($user))
{
    $user->load('data');
}

我不认为你可以在Eloquent模型中把find()链在其他任何东西之后。

与其他答案相反的另一种选择是:

User::with('data')->where('user_id', 1)->first();