Laravel - belongsTo关系中的两个外键

时间:2018-04-07 20:42:27

标签: laravel

我知道有类似的问题,但我找不到答案。

我有两张桌子

users:
    id
    name

chats:
    id
    user_id
    friend_id

我需要从聊天模型中获取friends。 所以,如果Auth::id() === chats.user_id我需要一个有friend_id的用户为fk

我正在尝试这样的事情,但没有效果

public function userOne() {
    return $this->belongsTo('App\Models\User', 'user_id');
}

public function userTwo() {
    return $this->belongsTo('App\Models\User', 'friend_id');
}

public function friend() {
    if ($this->userOne()->first()->id === Auth::user()->id) {
        return $this->userTwo();
    }

    return $this->userOne();
}

所以,基本上我需要聊天模型中的条件来检查id是不是我的,然后返回friend或不同的关系?

2 个答案:

答案 0 :(得分:0)

看看你在做什么。让我们拥有 id = 1 的用户。然后,当您调用方法 $ user-> userOne()时,会选择聊天表中的所有列,其中 user_id = 1 。当您拨打 $ user-> userTwo()时,则会从聊天表中删除所有 friend_id = 1 。 现在我们调用将要发生的 $ user-> friend()

     if ($user->userOne()->first()->id === Auth::user()->id) {
         return $this->userTwo();
     }

即。

     if (id of our user == 1) {
        then return all columns where friend_id = 1
     }

你需要那个

if ($this->userOne()->first()->user_id === Auth::user()->id) {
         return $this->userOne()->first()->friend_id;
}

答案 1 :(得分:0)

朋友可以是用户的方法

在您的朋友模型中添加

public function friend()
{
    return $this->hasMany('App\Friend');
}