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

Laravel如何获取模型关系中的id参数?,laravel,Laravel,我有一个查询来获取消息: 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

我有一个查询来获取消息:

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函数中的第一个where子句给出的结果基本相同。这种关系还可以

问题是我不知道如何对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();
    });

所以我认为问题在于模型关系(user)已经设置为获取消息,其中用户是消息接收者(to)

因此,您需要定义另一个关系来获取用户是发件人(发件人)的消息,因此

//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()); }
不管怎样,我建议你采用第一种方法

好的,那么添加您的最终解决方案以获取消息

//get all messages with
$this->sentMessages->merge($this->recievedMessages)

为了确保我理解了您的问题——在这两种情况下,您的查询都试图获取id位于两个id范围或id列表之一的消息?是这样吗?我不明白你的问题,两个列表范围?这似乎不是一个好的做法,也许我现在会寻找其他解决方案…并给出一个错误:
“message”:“array_merge():Argument#1不是数组”
我正在尝试做类似的事情:
return$this->hasMany(message::where([['messages.from',auth()->id()]),['messages.to','id']]);
但即使这样也会抛出:
“message:“参数太少,无法使用函数illumb\\Database\\elount\\Builder::u construct(),0在C:\\wwww2\\medpraca2\\vendor\\larvel\\framework\\src\\illumb\\Database\\elount\\Concerns\\hasrelations.php的第656行传递,预期正好是1”,
在模型中拆分函数是个好主意。我使用
$this->sentMessages->merge($this->receivedmessages)
将它们合并到模型外,我终于可以工作了。你可以用这个更新这个答案
//get all messages with
$this->sentMessages->merge($this->recievedMessages)