php - 如何在 Laravel/Eloquent 中为多态表添加别名

标签 php mysql laravel eloquent polymorphic-associations

有以下型号及表格

CallRequest (parent)
    'id',
    'parent_id',
    'phone_number',
    'extension_id',
    'extension_type',

public $morphTo = [
    'extension' => [],
];


AsapLead (children)
    'id'

public $morphOne = [
    'call_request' => [
        CallRequest::class,
        'name' => 'extension',
    ],
];

其中具有多态关系。为了避免数据透视表,所有数据都存储在一张表中,因此父调用不会有 parent_idextension_idextension_type填充。只有 child 才会有这些。 Asap Lead 只有 id,其余所需信息位于其父级中。

流程: 首先,它使用 parent_id = null 创建 parent 调用。如果调用失败,则会创建子调用,并通过 parent_id 与前一个调用连接。另外,它还添加了extension_type,因为有多个扩展,但为了避免复杂化,我们在这种情况下只对一个进行操作。然后我需要检索父调用,它有最多 3 个子调用,并且是在 7 天前创建的。查询如下所示:

$callRequestTable = CallRequest::table();
$leadTable = CallRequest::table() . " as lead";

DB::table($leadTable)
    ->rightjoin($callRequestTable, 'lead.id', '=', $callRequestTable . '.parent_id')
    ->where($callRequestTable . '.extension_type', '=', AsapLead::class)
    ->where($callRequestTable . '.created_at', '>', Carbon::now()->subDays(7))
    ->groupBy('lead.id')
    ->having(DB::raw('count(*)'), '<', 3)
    ->select('lead.*')
    ->get();

但不幸的是它不起作用。最好对 CallRequest::... 进行操作,以便最终获得这些模型而不是普通数组,但我也无法弄清楚。

最佳答案

您必须使用Raw Expressions在查询中将表名转换为sql表达式,这是一个示例:

DB::table( DB::raw('callRequests AS leads') )->...

关于php - 如何在 Laravel/Eloquent 中为多态表添加别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47819188/

相关文章:

php - 为电子邮件确认生成确认码

mysql - 在 mysql 中使用准备语句插入查询?

php - 如何在 Laravel 中使用表单向 URL 添加一些参数

php - 如何在 Laravel 中使用 Sentry 和 Ardent?

mysql - 如何在一个表中使用另一个表的自增列-mysql workbench 6.2

c# - 没有时间没有 string.format 的日期时间

laravel - 如何在 Laravel 中通过 toArray/toDatabase 函数指定通知属性?

laravel - Laravel 开发中的 SSL 证书

php - Laravel 5.1 从空值创建默认对象

PHPExcel 右对齐图像