laravel 使用 in 子句模型名称连接多态数据透视表

Posted

技术标签:

【中文标题】laravel 使用 in 子句模型名称连接多态数据透视表【英文标题】:laravel join with polymorphic pivot table using in on clause model names 【发布时间】:2019-06-14 21:21:49 【问题描述】:

我正在使用雄辩的多态关系来管理不同模型和称为公司的其他模型之间的数据透视表。

我有一个包含以下结构的数据透视表:

我必须使用 eloquent 查询生成器使用 model_id 和 model_type 在车辆表和数据透视表之间进行连接查询。但是当我这样做时:

$builder->join('pivot_table', function($join)
        $join->on('vehicle.id','=','pivot_table.model_id')
            ->on('pivot.model_type', Vehiculo::class  );
    )->select('vehicle.*',pivot_table.*)->get();

此代码不返回任何结果。但是,如果我将第二个 on 子句更改为:

    $builder->join('pivot_table', function($join)
        $join->on('vehicle.id','=','pivot_table.model_id')
            ->on('pivot.model_type', 'like' , '%Vehiculo%');
    )->select('vehicle.*',pivot_table.*)->get();

这段代码运行正确并返回我想要的结果,但我认为这是获取结果的错误方式。

有人知道是否有办法让第一个代码运行?

感谢您的回复。

【问题讨论】:

【参考方案1】:

好的。我解决了。解决方案是将第二个更改为 where

$builder->join('pivot_table', function($join)
        $join->on('vehicle.id','=','pivot_table.model_id')
            ->where('pivot.model_type' , Vehiculo::class);
    )->select('vehicle.*',pivot_table.*)->get();

【讨论】:

以上是关于laravel 使用 in 子句模型名称连接多态数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel where 子句中使用 find_in_set()

在laravel where子句中使用find_in_set()

在 Laravel 中创建多态字段名称的规则是啥?

在 Laravel 模型中使用多个子句计算行数

Laravel - 反向多态关系

如何在 switch 语句中使用 laravel 模型运行多个 Where 子句