Eloquent 的 where/orWhere 组合失败

Eloquent's where/orWhere combination failing

我的问题有解决方案,但它困扰着我,希望不需要解决方案,因为问题毫无意义。

我有一个table链接;好像有 2 个用户链接在一起。 table 很简单: iduser_1_iduser_2_idstatuscreated...

我希望两个用户都能够在一个简单的控制器销毁方法中删除:

通常我写:

Links::where(['user_1_id' => auth()->id(),'user_2_id' => $user->id])
    ->orWhere(['user_1_id' => $user->id, 'user_2_id' => auth()->id()])
    ->delete();

正在通过 url...

解析 $user class

我当前的解决方案包括调用

Links::where([...])->delete() 

一次,如果等于0,则将用户的id倒过来再调用一次;并且有效...

orWhere 方法仅 returns 并删除所有建立的链接...通常 user_2_id 始终相同,而 user_1_id 从 99-108 变化。 .. 为什么会这样?

猜想你的查询有语法错误,试试

Links::where([
        ['user_1_id', auth()->id()],
        ['user_2_id', $user->id]
    ])
    ->orWhere([
        ['user_1_id', $user->id],
        ['user_2_id', auth()->id()]
    ])
    ->delete();
public function scopeBetween($query, $sender, $recipient)
    {
        $query->where([
            ['sender_id', $sender->id],
            ['recipient_id', $recipient->id]
        ])->orWhere([
            ['sender_id', $recipient->id],
            ['recipient_id', $sender->id]
        ]);
    }

发现这是最好的解决方案...创建一个范围函数,该函数将发送者和接收者作为参数来确定是否已建立友谊