繁体   English   中英

为什么belongsTo()返回null?

[英]Why belongsTo() return null?

我有两个模型和两个表。 具有数据库结构的第一个模型名称Inbox

在此处输入图片说明

第二个模型名称是具有数据库结构的StudentData

在此处输入图片说明

我将使用我的方法以route('/sended') sended route('/sended')所有消息以获取所需的消息:

public function getMessages($message_type = "new")
{
    $user_id = Auth::user()->id;

    $inbox = new Inbox();

    $paginate = 3;

    switch ($message_type) {

        case 'sended':
            $messages = $inbox->where('sender', $user_id)
                              ->where('trashed_in_sender', 0)
                              ->where('show_in_sender', 0)
                              ->orderBy('created_at', 'desc')
                              ->paginate($paginate);
            break;
        default:
            return abort(404);
            break;
    }

    return $messages;
}

我的模型Inbox有方法:

public function messageSender()
{
    return $this->belongsTo("App\StudentData", 'sender');
}

public function messageRecipient()
{
    return $this->belongsTo("App\StudentData", 'recipient');
}

当我在视图中调用$message->messageSender ,结果为NULL。 为什么我不能用得到的数据sender idinboxes中的表student_datas

所以,我有几个问题。

1)您的User和StudentData模型之间如何精确交互? 有2个模型与1:1关系似乎有些奇怪。 为什么不只使用用户模型?
(您甚至有一个用户模型,还是我误解了?)

2)我认为您的方向是错误的...如果您已经有一个User模型,请尝试从那里获取发送的消息。 我举一个例子。

假设您有一个用户模型和一个收件箱模型,其中有一个“发件人”和“收件人”,它们都具有该用户模型的ID。
因此,在收件箱模型中,我们有:

public function messageSender()
{
    return $this->belongsTo("App\User", 'sender');
}

public function messageRecipient()
{
    return $this->belongsTo("App\User", 'recipient');
}

但是为什么不从另一个方向去呢? 我们可以像这样在用户模型中编写关系

public function sentMessages()
{
    return $this->hasMany("App\Inbox", 'sender');
}
public function receivedMessages()
{
    return $this->hasMany("App\Inbox", 'recipient');
}

现在,您只需使用即可获取所有已发送的消息(即,用户是发件人的所有消息)

$user->sentMessages

并对此进行操作。 或者,您甚至可以建立特殊的助手关系(例如,我的名字很烂,找到了更好的助手...)

public function unreadSentMessages()
{
    return $this->hasMany("App\Inbox", 'sender')
                ->where('trashed_in_sender', 0)
                ->where('show_in_sender', 0)
                ->orderBy('created_at', 'desc');
}

并且可以将$ user-> sentMessages用于他的所有消息,或者仅将$ user-> unreadSentMessages用于您需要的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM