Php Laravel Elotent有许多/有一个附加条款

Php Laravel Elotent有许多/有一个附加条款,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,早上好 如果之前有人问过,我们表示歉意,但我们无法找到任何问题的答案 我们正在使用一个不属于我们的遗留数据库(只读),并试图在Laravel中使用Elount(模型)来解决一些常见问题 是否可以设置Eloquent的急切加载,以便为HasMany/HasOne关系生成器创建额外的ON子句 请看下面我们在没有原始查询的情况下试图实现的内容 public function policy() { return $this->hasMany(Policy::class, 'Group',

早上好

如果之前有人问过,我们表示歉意,但我们无法找到任何问题的答案

我们正在使用一个不属于我们的遗留数据库(只读),并试图在Laravel中使用Elount(模型)来解决一些常见问题

是否可以设置Eloquent的急切加载,以便为HasMany/HasOne关系生成器创建额外的ON子句

请看下面我们在没有原始查询的情况下试图实现的内容

public function policy()
{
    return $this->hasMany(Policy::class, 'Group', 'Group')
        // This breaks as `on` isn't defined on Eloquent\Builder. Is this concept possible? Multiple on clauses
        ->on('Reference', 'Reference');
}
在我们的控制器中,我们尝试了以下操作,但也失败了

 Vehicle::with([
        'policy' => function ($query) {
            // Model isn't instantiated yet, but we need an additional on clause here
            $query->on('Reference', 'Reference');
        }
   ]);
是否可以实现上述目标,或者我们是否必须恢复使用原始查询


提前感谢您的帮助。

我假设查询已经作为原始SQL存在,您试图实现的是将其转换为使用Elount。如果是这种情况,您可能会发现使用内置的原始查询更快。

我假设该查询已经作为原始SQL存在,您试图实现的是将其转换为使用Elount。如果是这种情况,您可能会发现使用内置原始查询会更快。您可以使用以下软件包:

您可以使用以下软件包:


我想你应该用这里,谢谢你的回复。似乎whereHas在后台做了一个EXISTS子查询,它似乎依赖于一组PHP变量,而不是表中的一列。你有一个例子吗?感谢$vehicle=vehicle::whereHas('policy',function($q){$q->where('Reference','Reference');})->get();看看这个:这正是我们正在寻找的。非常感谢。请列出答案,我们将接受。辉煌的图书馆!我想你应该用这里,谢谢你的回复。似乎whereHas在后台做了一个EXISTS子查询,它似乎依赖于一组PHP变量,而不是表中的一列。你有一个例子吗?感谢$vehicle=vehicle::whereHas('policy',function($q){$q->where('Reference','Reference');})->get();看看这个:这正是我们正在寻找的。非常感谢。请列出答案,我们将接受。辉煌的图书馆!
class Vehicle extends Model
{
    use \Awobaz\Compoships\Compoships;

    public function policy()
    {
        return $this->hasMany(Policy::class, ['Group', 'Reference'], ['Group', 'Reference']);
    }
}