我有两个模型和两个表。具有数据库结构的第一个模型名称收件箱
:
第二个模型名称是 StudentData
数据库结构:
我将返回 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/