【问题标题】:Laravel hasOne conditional relationshipLaravel 有一个条件关系
【发布时间】:2014-11-30 22:49:14
【问题描述】:

我有一个用户模型,每个用户都有一个内部或外部类型。内部和外部用户存储的数据非常不同,因此存在单独的 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');
    }
}

【问题讨论】:

    标签: php laravel orm laravel-4


    【解决方案1】:

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

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

    【讨论】:

    • 是的 - 看起来这将是我要走的路,只是想知道是否会有更高级的选择!
    • @Ryu_hayabusa 你指的是什么方法?如果我没记错的话,只是关系方法必须是驼峰式。
    【解决方案2】:

    我认为您不能在 Eloquent 模型中将 find() 链接到其他任何内容之后。

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

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

    【讨论】:

    • 链接确实有效,但前提是没有条件。因此,如果它总是返回第一个选项,它工作正常
    • 嗯,好的。谢谢,看起来你还是找到了答案:)。
    猜你喜欢
    • 2021-03-10
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多