如何在目标模型 Laravel 中通过 model_type 获取关系
How to get relations by model_type in target model Laravel
我有一个不同消息的列表(短信、phone 电话、普通消息等),我正在尝试通过 model_type
将此列表连接起来 table和 model_id
:
Schema::create('lead_messages', function (Blueprint $table) {
$table->foreignId('lead_id')->nullable()->constrained('leads')->onDelete('cascade');
$table->string('model_type');
$table->unsignedBigInteger('model_id');
$table->index(['model_id', 'model_type'], 'lead_messages_model_id_model_type_index');
$table->primary(['lead_id', 'model_id', 'model_type'], 'lead_messages_lead_model_type_primary');
$table->softDeletes();
$table->timestamps();
});
然后我可以为用户获取提要。
现在我正在尝试按模型获取所有实体。 是否可以通过table字段获取它们?
类似的东西(当然这是错误的代码):
public function data()
{
return $this->hasOne('model_type', 'id', 'model_id');
}
好的,这比看起来容易。我的问题in documentation有答案。此代码将为我提供必要的数据:
型号:
public function data()
{
return $this->morphTo(__FUNCTION__, 'model_type', 'model_id');
}
服务:
$response = LeadMessage::whereLeadId($request->lead_id)
->with('data')
->paginate(30);
感谢@Giles Bennett
我有一个不同消息的列表(短信、phone 电话、普通消息等),我正在尝试通过 model_type
将此列表连接起来 table和 model_id
:
Schema::create('lead_messages', function (Blueprint $table) {
$table->foreignId('lead_id')->nullable()->constrained('leads')->onDelete('cascade');
$table->string('model_type');
$table->unsignedBigInteger('model_id');
$table->index(['model_id', 'model_type'], 'lead_messages_model_id_model_type_index');
$table->primary(['lead_id', 'model_id', 'model_type'], 'lead_messages_lead_model_type_primary');
$table->softDeletes();
$table->timestamps();
});
然后我可以为用户获取提要。
现在我正在尝试按模型获取所有实体。 是否可以通过table字段获取它们?
类似的东西(当然这是错误的代码):
public function data()
{
return $this->hasOne('model_type', 'id', 'model_id');
}
好的,这比看起来容易。我的问题in documentation有答案。此代码将为我提供必要的数据:
型号:
public function data()
{
return $this->morphTo(__FUNCTION__, 'model_type', 'model_id');
}
服务:
$response = LeadMessage::whereLeadId($request->lead_id)
->with('data')
->paginate(30);
感谢@Giles Bennett