laravel - 如何在laravel morph关系中通过id获取不可复制类型的记录
问题描述
对于消息传递系统,我使用四个表设置了两个变形关系。
我的问题是?
- 如何从接收集合中获取特定学生的消息?
例如,如果学生 X 和 Y向员工 A发送消息
当我查询员工 A 收到的消息时,例如:
$staff = \App\Staff::find(1);
$all_message_recieves = $staff->receives;
我从Student X 和 Y收到了两条消息,但我只想要Student X消息
表结构是
tbl_message
id messageable_id, messageable_type, subject, message
1 1 app\staff msg1 msg1
2 2 app\staff msg1 msg1
3 1 app\student msg2 msg2
4 2 app\student msg2 msg2
tbl_message_receiver
id, message_id , receiveable_id, receiveable_type
1 1 1 app\student
2 2 2 app\student
3 3 1 app\staff
3 4 1 app\staff
Staff
id name
1 A
2 B
Student
id name
1 X
2 Y
Message.php 模型
class Message extends Model
{
public $table = "tbl_message";
public function messageable()
{
return $this->morphTo();
}
}
Messagereceive.php 模型
class Messagereceive extends Model
{
public $table = "tbl_message_receiver";
public function receiveable()
{
return $this->morphTo();
}
public function message()
{
return $this->hasOne('App\Message');
}
}
Staff.php 模型
class Staff extends Model
{
public function messages()
{
return $this->morphMany('App\Message', 'messageable');
}
public function receives()
{
return $this->morphMany('App\Messagereceive', 'receiveable');
}
}
Student.php 模型
class Student extends Model
{
public function messages()
{
return $this->morphMany('App\Message', 'messageable');
}
public function receives()
{
return $this->morphMany('App\Messagereceive', 'receiveable');
}
}
解决方案
推荐阅读
- c# - EPPLUS 没有清楚地识别 RichText 属性
- react-native - 如何摆脱默认的白色启动由 ios 中的 react-native 屏幕提供支持?
- c++ - 错误:非常量静态数据成员必须被初始化
- angular - 我想在我的 ionic 应用程序中创建一个模板驱动的表单,并通过验证它给出错误
- ffmpeg - 在 Ubuntu Linux 中将 6 个视频文件拼接成一个 360 视频
- go - 尽管在启动应用程序时是私有的,但如何从主包调用 main() 函数?
- python - Django-python 电子邮件表单未通过 gmail smtp 转发发件人的电子邮件地址
- typescript - 默认函数参数和扩展接口的接口
- java - 为什么在 main 方法中使用时在静态块中声明的变量找不到?
- python-3.x - Python aiosqlite 覆盖与 pysqlcipher3 的连接