为了账号安全,请及时绑定邮箱和手机立即绑定

在laravel中动态填充下拉列表的有效方法

在laravel中动态填充下拉列表的有效方法

PHP
炎炎设计 2021-12-24 10:01:50
我有多个数据库表,每个表都填充一个下拉列表,重点是每个下拉列表影响下一个下拉列表。我的意思是,如果我从第一个下拉列表中选择一个项目,则所选项目的下一个下拉值会发生变化,这意味着它们是相关的,并且它们会在每个下拉项目更改时动态填充。我知道这效率不高,需要重构,所以我很乐意指出填充这些下拉列表的正确方法。
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

以下是您应该注意的事项。首先,如果您验证了Province_id,则无需在您的代码中仔细检查它。所以你应该删除 Province::whereId($request->province_id)->exists()


第二个是,Laravel 有 ->when eloquent 方法,可以帮助您减少对空值的 if else 语句,如果给定参数的值是空值,则不会影响查询。 https://laravel.com/docs/5.8/queries#conditional-clauses


第三个,我建议你使用 Laravel Resources 来转换你从数据库中获取的数据在 API 中。 https://laravel.com/docs/5.8/eloquent-resources


这是一小部分代码的更好版本,我认为通过建议的提示和此代码,您可以重构它:


class TestController extends Controller

{

    const DEFAULT_COUNTRY_ID = '10';


    public $request;


    public function something(Request $request)

    {

        //  Put Validations ...


        $this->request = $request;


        OutDoorMedia::when('province_id', function ($query) {

            return $query->where('province_id', $this->request->province_id);

        })

        ->when('country_id', function ($query) {

            // if country_id exists

            return $query->where('country_id', $this->request->country_id);

        }, function ($query) {

            // else of above if (country_id is null ...)

            return $query->where('country_id', self::DEFAULT_COUNTRY_ID);

        })

        ->get();

    }

}

这只是一个示例,您可以使用这种方式重构您的代码库。


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信