[英]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');
}
然后,你可以继续你想用做任何loggedInUser
和userLike
。
假设您在某个位置(在您的代码中)有多个用户,并且只想为当前登录的用户加载点赞,则可以
//$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_id
和post_id
创建一个新条目 (您还可以使用中间件检查用户是否直接在您的路线上登录)
4)在视图中
我将使用ajax调用来调用控制器方法。
不知道我是否忘记了什么,但希望可以对您有所帮助。
如果您不仅需要“喜欢”更多信息,请检查多态关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.