【问题标题】:Sync element to a child on Laravel将元素同步到 Laravel 上的孩子
【发布时间】:2015-06-16 13:44:46
【问题描述】:

我的 Shema 数据库是

用户表

    id
    login
    parent

签名表

    id
    name
    user_id (Sign owner)

数据透视表 user_sign

    id
    user_id
    sign_id

我的用户模型包含

    public function signs() {
        return $this->belongsToMany('App\Sign', 'user_sign');
    }


    public function parent(){
        return $this->belongsTo('User', 'parent');
    }

    public function children(){
        return $this->hasMany('User', 'parent', 'user_id');
    }

而我的 Sign 模型包含

    public function users() {
        return $this->belongsToMany('App\User', 'user_sign')->select(['users.id','name']);
    }

父用户可以通过此路由将Sign附加/同步给子用户(他发送sign_id和child_id)

    Route::put('sign/share', 'SignController@share')

要执行此操作,我必须在我的控制器中检查: - 如果 sign_id 的所有者是 $user_id - 如果 child_id 是 $user_id 的孩子

然后,我执行附加/同步。

现在,在我的控制器中,我有:

public function share(Request $request)
{
    $userId = $request->input('user_id');
    $sign = Sign::where('user_id', $userId)->find($id);

    if(!$sign){
        return response()->json(['message'=>'FAIL'], 404);
    }
}

但是我在这之后完全屏蔽了...可以一行中检查并附加吗?

感谢您的帮助

【问题讨论】:

    标签: php mysql laravel eloquent laravel-5


    【解决方案1】:

    就同步/附加而言,您可以使用此 sytanx

    $user->roles()->sync([1, 2, 3]);
    

    Laravel Docs中所述

    您可以在 IF 的条件下进行这两项检查并在为 true 的情况下进行分配,这就是您的控制器最终的样子。

        public function share(Request $request)
        {
            $userId = $request->input('user_id');
            $signId = $request->input('sign_id');
            $childId = $request->input('child_id');            
            if (Sign::find($singId)->user_id == $userId && User::find($userId)->child_id == $childId) 
            {
    
               //Attach the sign to child user
               User::find($childId)->signs()->attach($signId);
    
            }
            else 
            {
    
                  return response()->json(['message'=>'FAIL'], 404);
    
            }
        }
    

    【讨论】:

    • 感谢您的回答。 user_id 是从我的 oauth 服务器传递过来的。
    • 我的 pb 不是要进行同步,而是如何检查 sign_id 的所有者是否为 $user_id 以及 child_id 是否为 $user_id 的子级。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2021-03-14
    • 2015-11-14
    • 2015-01-07
    • 2013-08-03
    • 1970-01-01
    • 2012-12-21
    相关资源
    最近更新 更多