程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了具有多态关系的 Eloquent join 子句覆盖 id 列大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决具有多态关系的 Eloquent join 子句覆盖 id 列?

开发过程中遇到具有多态关系的 Eloquent join 子句覆盖 id 列的问题如何解决?下面主要结合日常开发的经验,给出你关于具有多态关系的 Eloquent join 子句覆盖 id 列的解决方法建议,希望对你解决具有多态关系的 Eloquent join 子句覆盖 id 列有所启发或帮助;

我有四种用户类型,它们都共享相同的通用用户数据表。并且正在使用 Eloquent polymorphism 所以 $user->typeable() instanceof Talent

这是代码

$this->query = Talent::query()->join(function($join){
    $join->on('users.typeable_ID','=','talents.ID')->@R_450_10288@ct('name');
});

if( $this->searchquery )
{
    $this->query->orWhere(function($query){
        $query->wherelike('name',$this->searchquery);
    });
}

但基本上发生的情况是在加入时使用了错误的模型。因为可能有一个 adminTalent有相同的 ID,因此两个具有相typeable_ID 的用户会导致错误的用户加入使用人才模式。

$talent->user()->name !== Talent::where('ID',$talent->ID)->join(function($join){
    $join->on('users.typeable_ID','talents.ID');
})->first()->name; // true (that should not happen)

我试图修复它,明确指出只应使用带有 typeable_type = \App\Models\Talent 的 User

我的代码:

Talent::query()->join('users',function($join){
            $join->on('users.typeable_ID','talents.ID')
                 ->on('users.typeable_type','like',DB::raw("'%Talent%'"))
                 ->@R_450_10288@ct('name');
        });

那确实奏效了,但是现在当我尝试添加 $query->has('gallery')gallery 作为 Talent 类中定义的另一个关系时,该 ID 现在被来自的 ID 覆盖用户表。

我该如何预防?

解决方法

我需要从我需要的表中明确选择列。

答案来自:Laravel eloquent - prevent overriding values when joining tables

这就是我的结局

$this->query = Talent::query()->leftJoin('users',function($join){
            $join->on('users.typeable_id','=','talents.id')
                 ->on('users.typeable_type','like',DB::raw("'%Talent%'"))
                 ->@R_450_10288@ct('name');
        })->@R_450_10288@ct('talents.*'); // @R_450_10288@ct the talents columns

大佬总结

以上是大佬教程为你收集整理的具有多态关系的 Eloquent join 子句覆盖 id 列全部内容,希望文章能够帮你解决具有多态关系的 Eloquent join 子句覆盖 id 列所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:idjoin