如何获得模型关系中的id参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (21)

我有一个查询要得到消息:

public function getMessagesFor($id)
{
   $messages = Message::where(function($q) use ($id) {
        $q->where('from', auth()->id());
        $q->where('to', $id);
    })->orWhere(function($q) use ($id) {
        $q->where('from', $id);
        $q->where('to', auth()->id());
    })->get();
}

这个逻辑是应该的,没有错误,一切都是好的。现在,我希望通过与其他用户的模型关系(而不是认证用户)直接获得消息。

因此,在用户模型中,我写道:

public function messages()
{
    return $this->hasMany(Message::class, 'to', 'id')
    ->where('messages.from', auth()->id());
 }

这基本上给出了与getMessages函数中的FirstWHERE子句相同的结果。这种关系运作得很好。

问题是我不知道如何编码WHERE子句的第二部分。我无法进入$id在我的模型中,我应该如何处理这个问题呢?知道怎么编码吗?

消息迁移:

    Schema::create('messages', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('from')->unsigned();
        $table->integer('to')->unsigned();
        $table->boolean('read')->default(false);
        $table->integer('offer_id')->nullable();
        $table->mediumText('body')->nullable();
        $table->timestamps();
    });
提问于
用户回答回答于

因此,我认为问题在于,模型关系(用户)已经被设置为获取消息,其中用户是消息接收者(To),

$this->hasMany(Message::class, 'to', 'id')

因此,你需要定义另一个关系来获取消息,其中用户是发件人(发件人),所以你有

//user is reciever
public function sentMessages() {
    return $this->hasMany(Message::class, 'to', 'id')
    ->where('messages.from', auth()->id()); }

//user is sender
public function recievedMessages() {
    return $this->hasMany(Message::class, 'from', 'id')
    ->where('messages.to', auth()->id()); }

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问4 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券