【问题标题】:Conditionals on multiple Laravel relationships多个 Laravel 关系的条件
【发布时间】:2021-09-20 12:20:31
【问题描述】:

我得到了名为Vehicles 的表,在其模型Vehicle 中定义了两个关系。

public function type(){
        return $this->belongsTo("App\VehiclePivot", 'vehicle_type_id', "id");
    }

和

public function workOrganization(){
        return $this->belongsTo("App\WorkOrganization", 'workOrganization_id', "id");
    }

当用作

$vehicles = Vehicle::with("type", "workOrganization");

他们工作得很好。显示每辆车的类型和工作组织。

如果我尝试

$vehicles = Vehicle::whereHas("type", function($query) use($request){
                            $query->where('name', '=', $request->type);
                        })->with("type")->get();

或

$vehicles = Vehicle::whereHas("workOrganization", function($query) use($request){
                            $query->where('name', '=', $request->workOrg);
                        })->with("workOrganization")->get();

它们也有效。

用户可以输入 type 或 workOrganization,或者两者都输入,也可以都不输入。

如果一个存在,那么只有那个关系应该“执行”,如果两者都有,那么两个关系都应该执行,如果它们都不存在,那么两个关系都应该执行。

可以通过eloquent完成吗?

【问题讨论】:

    标签: laravel relationship


    【解决方案1】:

    我觉得你可以用when

    $vehicles = Vehicle::when(!empty($request->workOrg),function ($query) use($request){
            $query->whereHas("workOrganization", function($query) use($request){
                $query->where('name', '=', $request->workOrg);
            });
        })->when(!empty($request->type),function ($query) use($request){
            $query->whereHas("type", function($query) use($request){
                $query->where('name', '=', $request->type);
            });
        })
            ->with("workOrganization","type")
            ->get();
    

    【讨论】:

    • 谢谢老兄。我尝试了我以前知道的不同的雄辩组合(包括显示的代码),但我想用简单的话解释比粘贴我尝试过的所有代码效果更好。
    • 我不想看起来“贪婪”,但你知道当我在 WorkOrganizations 搜索可用车辆时,我如何获得所述车辆的类型?我已经用两个嵌套的 for 循环和条件完成了它,我比较了传递的 $request->type 变量的 id。是否有雄辩的方式,如果有,WorkOrganizations 模型通过 Vehicle 模型“连接”到 VehiclePivot 的关系又是什么?
    • @VeljkoStefanovic 属于你必须使用的任何关系,如果它的数据透视表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多