php - 为什么 belongsTo() 返回 null?

标签 php laravel

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

enter image description here

第二个模型名称是 StudentData 数据库结构:

enter image description here

我将返回 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');
}

当我在 View 中调用 $message->messageSender 时,结果为 NULL。为什么我无法使用 student_datas 表中的 inboxes 表中的 sender id 获取数据

最佳答案

所以,我有几个问题....

1) 您的 User 和 StudentData 模型究竟是如何交互的?有 2 个模型似乎是 1:1 的关系似乎有点奇怪? 为什么不直接使用用户模型?
(你甚至有用户模型还是我误解了事情?)

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

假设您有一个用户模型和一个收件箱模型,其中您有一个“发件人”和“收件人”,它们都有一个用户模型的 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。

关于php - 为什么 belongsTo() 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320116/

相关文章:

php - 使用 preg_replace 删除一个 div

php - 如何使用 PHP 编写网站搜索程序?

php - 如何在自定义方程中创建带有占位符的 pdo mysql 准备好的语句?

javascript - 如何使用 Javascript 制作 Laravel 密码哈希

php - 无法将 php 从本地主机详细信息更改为我的服务器以连接 sql 数据库

php - Laravel Image Intervention 避免旋转

php - laravel eloquent - 检查表中数组的所有值

php - 我想知道我附近的位置在哪个基本方向

php - Laravel:vue 组件不渲染

json - 如何在laravel中为api返回json格式而不是html