我有一个消息模型,管理员和用户都可以创建消息。但对于管理员和用户来说,有单独的模型,称为管理员和用户。
消息模型有一个名为“created_by”的列,用于存储创建者的 ID。现在的问题是我如何与 Message 和 Creator 建立关系。我需要从“管理员”模型或“用户”模型获取创建者详细信息。
目前我正在 Message 模型中使用如下方法。
public function creator(){
if(User::find($this->created_by)){
return User::find($this->created_by);
}else{
return Admin::find($this->created_by);
}
}
但它不支持 Laravel 中的预加载功能。
感谢您的帮助。
最佳答案
在这种情况下您应该使用多态关系。如 laravel doc 中所述
A polymorphic relationship allows the target model to belong to more than one type of model using a single association.
通过执行此操作,您可以从管理员和用户模型获取消息。
在Message模型中定义以下方法。
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
/**
* Get the owning messageable model.
*/
public function messageable()
{
return $this->morphTo();
}
}
并在迁移文件中添加以下列:
$table->unsignedBigInteger('messageable_id');
$table->string('messageable_type');
然后,在Admin模型中定义以下方法。
class Admin extends Model
{
/**
* Get all of the admin's messages.
*/
public function messages()
{
return $this->morphMany('App\Message', 'messageable');
}
}
在用户模型中。
class User extends Model
{
/**
* Get all of the user's messages.
*/
public function messages()
{
return $this->morphMany('App\Message', 'messageable');
}
}
关于php - 单一 Eloquent 关系的多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61437026/