繁体   English   中英

用户登录时的关系条件

[英]Relationship condition if user is logged in

我想创建一个检查用户是否喜欢帖子的关系。 为此,该关系需要检查用户是否已登录,然后使用其user_id获取类似记录。 就像是:

public function userLike() {
    if (Auth::check()) return $this->hasOne('App\Like')->where('user_id', Auth::user()->id);
}

但是,这不起作用。 此外,如果用户未登录并且调用了此关系(默认情况下为该关系),它将返回错误。

正确的做法是什么?

如果要有条件地加载关系,则可以通过延迟加载来完成。 在您的示例中,您可以将关系定义为

public function userLike() {
    return $this->hasOne('App\Like', 'user_id');
}  

然后,在您的控制器(或其他任何地方)中,您可以检查用户是否有问题,当前是否已登录该用户。

$loggedInUser = auth()->user(); 
if($loggedInUser){
    $loggedInUser->load('userLike');
}  

然后,你可以继续你想用做任何loggedInUseruserLike

假设您在某个位置(在您的代码中)有多个用户,并且只想为当前登录的用户加载点赞,则可以

//$users is a collection of multiple users - assumed
foreach($users as $user){
    if($user->email === auth()->user()->email){
        $user->load('userLike');
    }
}  

希望这可以帮助

这就是我要做的:

1)“喜欢”表

我首先要创建一个表来存储所有“喜欢”,并在其中存储“ post_id ”和“ user_id ”的列

2)建立关系

用户模型

public function likes()
{
    return $this->belongsToMany('App\Post', 'likes', 'user_id', 'post_id');
}

邮政模型

public function likes()
{
    return $this->belongsToMany('App\User', 'likes');
}

3)Post Controller-方法

我将执行以下操作:

  • 检查用户是否登录,否则抛出错误
  • 确保帖子存在,否则引发错误
  • 在类似表中使用user_idpost_id创建一个新条目

(您还可以使用中间件检查用户是否直接在您的路线上登录)

4)在视图中

我将使用ajax调用来调用控制器方法。

不知道我是否忘记了什么,但希望可以对您有所帮助。

如果您不仅需要“喜欢”更多信息,请检查多态关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM