我有两个模型和两个表.带有数据库结构的第一个型号名称Inbox:
第二个模型名称是具有数据库结构的StudentData:
我将使用我的方法返回路由(‘/ 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;
}
我的模型收件箱中有方法:
public function messageSender()
{
return $this->belongsTo("App\StudentData", 'sender');
}
public function messageRecipient()
{
return $this->belongsTo("App\StudentData", 'recipient');
}
当我在视图中调用$message-> messageSender时,结果为NULL.为什么我无法使用student_datas表中的收件箱表中的发件人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');
}
但为什么不从另一个方向走?我们可以在User模型中编写关系
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仅用于您需要的消息.